Как да предотвратите инжектирането на SQL в PHP (със снимки)

Съдържание:

Как да предотвратите инжектирането на SQL в PHP (със снимки)
Как да предотвратите инжектирането на SQL в PHP (със снимки)

Видео: Как да предотвратите инжектирането на SQL в PHP (със снимки)

Видео: Как да предотвратите инжектирането на SQL в PHP (със снимки)
Видео: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Може
Anonim

Това wikiHow ви учи как да предотвратите инжектирането на SQL с помощта на подготвени изявления в PHP. SQL инжектирането е една от най -често срещаните уязвимости в уеб приложенията днес. Подготвените изявления използват свързани параметри и не комбинират променливи с SQL низове, което прави невъзможно нападателят да промени SQL израза.

Подготвените изявления комбинират променливата с компилирания SQL израз, така че SQL и променливите се изпращат отделно. След това променливите се интерпретират като просто низове, а не като част от SQL израза. Използвайки методите в стъпките по -долу, няма да е необходимо да използвате други техники за инжектиране на SQL инжектиране, като mysql_real_escape_string ().

Стъпки

Част 1 от 2: Разбиране на SQL инжектирането

Стъпка 1. SQL Injection е вид уязвимост в приложения, които използват SQL база данни

Уязвимостта възниква, когато потребителски вход се използва в SQL оператор:

$ name = $ _GET ['потребителско име']; $ query = "SELECT password FROM tbl_user WHERE name = '$ name'";

Стъпка 2. Стойността, която потребителят въвежда в URL променливата потребителско име, ще бъде присвоена на променливата $ name

След това се поставя директно в SQL израза, което дава възможност на потребителя да редактира SQL израза.

$ name = "admin 'ИЛИ 1 = 1 -"; $ query = "SELECT password FROM tbl_user WHERE name = '$ name'";

Стъпка 3. След това SQL базата данни ще получи SQL израза, както следва:

ИЗБЕРЕТЕ парола ОТ tbl_users WHERE name = 'admin' ИЛИ 1 = 1 - '

  • Това е валиден SQL, но вместо да върне една парола за потребителя, изразът ще върне всички пароли в таблицата tbl_user. Това не е нещо, което искате във вашите уеб приложения.

    Част 2 от 2: Използване на mySQLi за създаване на подготвени изявления

    2542820 1
    2542820 1

    Стъпка 1. Създайте заявката за избор на mySQLi

    Използвайте кода по -долу, за да ИЗБЕРЕТЕ данни от таблица, използвайки подготвени изявления на mySQLi.

    $ name = $ _GET ['потребителско име']; if ($ stmt = $ mysqli-> priprem ("SELECT password FROM tbl_users WHERE name =?")) {// Свързване на променлива към параметъра като низ. $ stmt-> bind_param ("s", $ name); // Изпълняваме изявлението. $ stmt-> execute (); // Вземете променливите от заявката. $ stmt-> bind_result ($ pass); // Извличане на данните. $ stmt-> fetch (); // Показване на данните. printf ("Парола за потребителя %s е %s / n", $ name, $ pass); // Затваряме подготвеното изявление. $ stmt-> close (); }

    Забележка: Променливата $ mysqli е обектът за свързване на mySQLi

    2542820 2
    2542820 2

    Стъпка 2. Създайте заявката за вмъкване на mySQLi

    Използвайте кода по -долу, за да ВМЕСТВАТЕ данни в таблица, използвайки подготвените изявления на mySQLi.

    $ name = $ _GET ['потребителско име']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> priprem ("INSERT INTO tbl_users (name, password) VALUES (?,?)")) {// Свържете променливите към параметъра като низове. $ stmt-> bind_param ("ss", $ name, $ password); // Изпълняваме изявлението. $ stmt-> execute (); // Затваряме подготвеното изявление. $ stmt-> close (); }

    Забележка: Променливата $ mysqli е обектът за свързване на mySQLi

    2542820 3
    2542820 3

    Стъпка 3. Създайте заявката за актуализиране на mySQLi

    Използвайте кода по -долу за АКТУАЛИЗИРАНЕ на данни в таблица, използвайки подготвени изявления на mySQLi.

    $ name = $ _GET ['потребителско име']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> priprem ("UPDATE tbl_users SET password =? WHERE name =?")) {// Свържете променливите към параметъра като низове. $ stmt-> bind_param ("ss", $ password, $ name); // Изпълняваме изявлението. $ stmt-> execute (); // Затваряме подготвеното изявление. $ stmt-> close (); }

    Забележка: Променливата $ mysqli е обектът за свързване на mySQLi

    2542820 4
    2542820 4

    Стъпка 4. Създайте заявката за изтриване на mySQLi

    Скриптът по -долу е как да ИЗТРИВАТЕ данни от таблица, използвайки подготвените изявления на mySQLi.

    $ name = $ _GET ['потребителско име']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> priprem ("DELETE FROM tbl_users WHERE name =?")) {// Свържете променливата с параметъра като низ. $ stmt-> bind_param ("s", $ name); // Изпълняваме изявлението. $ stmt-> execute (); // Затваряме подготвеното изявление. $ stmt-> close (); }

Препоръчано: