PHPде SQL инъекциясын кантип алдын алуу керек (сүрөттөр менен)

Мазмуну:

PHPде SQL инъекциясын кантип алдын алуу керек (сүрөттөр менен)
PHPде SQL инъекциясын кантип алдын алуу керек (сүрөттөр менен)

Video: PHPде SQL инъекциясын кантип алдын алуу керек (сүрөттөр менен)

Video: PHPде SQL инъекциясын кантип алдын алуу керек (сүрөттөр менен)
Video: Садыр АТА сизге рахмат! ПРЕЗИДЕНТ 5 жаштагы кызга ҮЙ салып баштады 2024, Май
Anonim

Бул 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 колдонуу

    2542820 1
    2542820 1

    Кадам 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 болуп саналат

    2542820 2
    2542820 2

    Кадам 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 болуп саналат

    2542820 3
    2542820 3

    Кадам 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 болуп саналат

    2542820 4
    2542820 4

    Кадам 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 (); }

Сунушталууда: