Бул wikiHow сизге PHPде даярдалган билдирүүлөрдү колдонуу менен SQL инъекциясын кантип болтурбоону үйрөтөт. SQL саймасы бүгүнкү күндө веб -тиркемелердеги эң кеңири таралган алсыздыктардын бири. Даярдалган билдирүүлөр чектелген параметрлерди колдонот жана өзгөрмөлөрдү SQL саптары менен бириктирбейт, бул чабуулчуга SQL билдирүүсүн өзгөртүүгө мүмкүндүк бербейт.
Даярдалган билдирүүлөр өзгөрмөнү SQLдин өзгөрмөсү менен бириктирет, ошондуктан SQL жана өзгөрмөлөр өзүнчө жөнөтүлөт. Андан кийин өзгөрмөлөр SQL билдирүүсүнүн бөлүгү эмес, жөн эле саптар катары чечмеленет. Төмөнкү кадамдардагы ыкмаларды колдонуу менен, сиз mysql_real_escape_string () сыяктуу башка SQL инжектордук чыпкалоо ыкмаларын колдонуунун кажети жок болот.
Кадамдар
2 ичинен 1 -бөлүк: SQL инжекциясын түшүнүү
Кадам 1. SQL Injection - бул SQL маалымат базасын колдонгон тиркемелердеги алсыздыктын бир түрү
Колдонмо киргизүүсү SQL билдирүүсүндө колдонулганда, алсыздык пайда болот:
$ name = $ _GET ['колдонуучунун аты']; $ query = "Сырсөздү ТАНДОО tbl_user WHERE name = '$ name'";
Кадам 2. Колдонуучу URL өзгөрмөсүнүн колдонуучу атына киргизген мааниси $ name өзгөрмөсүнө ыйгарылат
Андан кийин ал түздөн -түз SQL билдирүүсүнө жайгаштырылып, колдонуучуга SQL билдирүүсүн түзөтүүгө мүмкүндүк берет.
$ name = "admin 'OR 1 = 1 -"; $ query = "Сырсөздү ТАНДОО tbl_user WHERE name = '$ name'";
Кадам 3. SQL базасы анда SQL билдирүүсүн төмөнкүчө алат:
Tbl_users WHOERE паролун тандаңыз WHERE name = 'admin' OR 1 = 1 - '
-
Бул жарактуу SQL, бирок колдонуучу үчүн бир сырсөздү кайтаруунун ордуна, билдирүү tbl_user таблицасындагы бардык сырсөздөрдү кайтарып берет. Бул веб -тиркемелериңизде каалаган нерсе эмес.
2дин 2 -бөлүгү: Даярдалган билдирүүлөрдү түзүү үчүн mySQLi колдонуу
Кадам 1. mySQLi SELECT суроо түзүү
MySQLi даярдалган билдирүүлөрдү колдонуу менен таблицадан маалыматтарды тандоо үчүн төмөнкү кодду колдонуңуз.
$ name = $ _GET ['колдонуучунун аты']; if ($ stmt = $ mysqli-> tayyorgarlik $ stmt-> bind_param ("s", $ name); // Билдирүүнү аткарыңыз. $ stmt-> execute (); // Сурамдагы өзгөрмөлөрдү алыңыз. $ stmt-> bind_result ($ pass); // Маалыматтарды алуу. $ stmt-> fetch (); // Маалыматтарды көрсөтүү. printf (" %s колдонуучусунун сырсөзү %s / n", $ аты, $ pass); // Даярдалган билдирүүнү жабыңыз. $ stmt-> close (); }
Эскертүү: $ mysqli өзгөрмөсү mySQLi Connection Object болуп саналат
Кадам 2. mySQLi INSERT суроо түзүү
MySQLi Даярдалган билдирүүлөрдү колдонуу менен таблицага маалыматтарды КИРГИЗҮҮ ҮЧҮН төмөнкү кодду колдонуңуз.
$ name = $ _GET ['колдонуучунун аты']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> дайындау ("INSERT INTO tbl_users (аты, сырсөзү) БААЛЫКТАРЫ (?,?)"))) // // Өзгөрмөлөрдү параметрге сап катары байлоо. $ stmt-> bind_param ("ss", $ name, $ password); // Билдирүүнү аткарыңыз. $ stmt-> execute (); // Даярдалган билдирүүнү жабыңыз. $ stmt-> close (); }
Эскертүү: $ mysqli өзгөрмөсү mySQLi Connection Object болуп саналат
Кадам 3. mySQLi UPDATE суроо түзүү
MySQLi даярдалган билдирүүлөрдү колдонуп, таблицада маалыматтарды UPDATE үчүн төмөнкү кодду колдонуңуз.
$ name = $ _GET ['колдонуучунун аты']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> даярдануу ("UPDATE tbl_users SET password =? WHERE name =?")) {// Параметрге өзгөрмөлөрдү сап катары байлоо. $ stmt-> bind_param ("ss", $ сырсөз, $ аты); // Билдирүүнү аткарыңыз. $ stmt-> execute (); // Даярдалган билдирүүнү жабыңыз. $ stmt-> close (); }
Эскертүү: $ mysqli өзгөрмөсү mySQLi Connection Object болуп саналат
Кадам 4. mySQLi DELETE суроо түзүү
Төмөнкү скрипт - mySQLi даярдалган билдирүүлөрдү колдонуу менен таблицадан маалыматтарды кантип жок кылуу.
$ name = $ _GET ['колдонуучунун аты']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> дайындау ("tbl_users WHERE name =?" ЖОЮУ)) {// Өзгөрмөнү параметр катары сапка байлоо. $ stmt-> bind_param ("s", $ name); // Билдирүүнү аткарыңыз. $ stmt-> execute (); // Даярдалган билдирүүнү жабыңыз. $ stmt-> close (); }