Как предотвратить внедрение SQL-кода в PHP (с изображениями)

Оглавление:

Как предотвратить внедрение SQL-кода в PHP (с изображениями)
Как предотвратить внедрение SQL-кода в PHP (с изображениями)

Видео: Как предотвратить внедрение SQL-кода в PHP (с изображениями)

Видео: Как предотвратить внедрение SQL-кода в PHP (с изображениями)
Видео: Как спрятать провода за Телевизором? На какой высоте подвесить TV 2024, Май
Anonim

Из этой статьи вы узнаете, как предотвратить SQL-инъекцию с помощью подготовленных операторов PHP. SQL-инъекция - одна из наиболее распространенных сегодня уязвимостей в веб-приложениях. Подготовленные операторы используют связанные параметры и не объединяют переменные со строками SQL, что делает невозможным изменение оператора SQL злоумышленником.

Подготовленные операторы объединяют переменную со скомпилированным оператором SQL, поэтому SQL и переменные отправляются отдельно. Затем переменные интерпретируются как простые строки, а не как часть оператора SQL. Используя методы, описанные ниже, вам не нужно будет использовать какие-либо другие методы фильтрации SQL-инъекций, такие как mysql_real_escape_string ().

Шаги

Часть 1 из 2: понимание SQL-инъекции

Шаг 1. SQL-инъекция - это тип уязвимости в приложениях, использующих базу данных SQL

Уязвимость возникает, когда пользовательский ввод используется в операторе SQL:

$ name = $ _GET ['имя пользователя']; $ query = "ВЫБРАТЬ пароль ОТ tbl_user WHERE name = '$ name'";

Шаг 2. Значение, которое пользователь вводит в переменную URL-адреса username, будет присвоено переменной $ name

Затем он помещается непосредственно в оператор SQL, что дает возможность пользователю редактировать оператор SQL.

$ name = "admin 'OR 1 = 1 -"; $ query = "ВЫБРАТЬ пароль ОТ tbl_user WHERE name = '$ name'";

Шаг 3. База данных SQL получит следующий оператор SQL:

ВЫБЕРИТЕ пароль ОТ tbl_users, ГДЕ name = 'admin' ИЛИ 1 = 1 - '

  • Это действительный SQL, но вместо того, чтобы возвращать один пароль для пользователя, оператор вернет все пароли в таблице tbl_user. Это не то, чего вы хотите в своих веб-приложениях.

    Часть 2 из 2: Использование mySQLi для создания подготовленных операторов

    2542820 1
    2542820 1

    Шаг 1. Создайте запрос mySQLi SELECT

    Используйте приведенный ниже код, чтобы ВЫБРАТЬ данные из таблицы, используя подготовленные операторы mySQLi.

    $ name = $ _GET ['имя пользователя']; if ($ stmt = $ mysqli-> prepare ("ВЫБРАТЬ пароль ОТ tbl_users WHERE name =?")) {// Привязать переменную к параметру как строку. $ stmt-> bind_param ("s", $ name); // Выполняем инструкцию. $ stmt-> выполнить (); // Получаем переменные из запроса. $ stmt-> bind_result ($ проход); // Извлекаем данные. $ stmt-> выборка (); // Отображаем данные. printf ("Пароль для пользователя% s:% s / n", $ name, $ pass); // Закрываем подготовленный оператор. $ stmt-> закрыть (); }

    Примечание. Переменная $ mysqli - это объект подключения mySQLi

    2542820 2
    2542820 2

    Шаг 2. Создайте запрос mySQLi INSERT

    Используйте приведенный ниже код, чтобы ВСТАВИТЬ данные в таблицу, используя подготовленные операторы mySQLi.

    $ name = $ _GET ['имя пользователя']; $ пароль = $ _GET ['пароль']; if ($ stmt = $ mysqli-> prepare ("INSERT INTO tbl_users (name, password) VALUES (?,?)")) {// Связываем переменные с параметром как строки. $ stmt-> bind_param ("ss", $ name, $ password); // Выполняем инструкцию. $ stmt-> выполнить (); // Закрываем подготовленный оператор. $ stmt-> закрыть (); }

    Примечание. Переменная $ mysqli - это объект подключения mySQLi

    2542820 3
    2542820 3

    Шаг 3. Создайте запрос ОБНОВЛЕНИЯ mySQLi

    Используйте приведенный ниже код для ОБНОВЛЕНИЯ данных в таблице с помощью подготовленных операторов mySQLi.

    $ name = $ _GET ['имя пользователя']; $ пароль = $ _GET ['пароль']; if ($ stmt = $ mysqli-> prepare ("UPDATE tbl_users SET password =? WHERE name =?")) {// Связываем переменные с параметром как строки. $ stmt-> bind_param ("ss", $ password, $ name); // Выполняем инструкцию. $ stmt-> выполнить (); // Закрываем подготовленный оператор. $ stmt-> закрыть (); }

    Примечание. Переменная $ mysqli - это объект подключения mySQLi

    2542820 4
    2542820 4

    Шаг 4. Создайте запрос на удаление mySQLi

    В приведенном ниже сценарии показано, как УДАЛИТЬ данные из таблицы, используя подготовленные операторы mySQLi.

    $ name = $ _GET ['имя пользователя']; $ пароль = $ _GET ['пароль']; if ($ stmt = $ mysqli-> prepare ("УДАЛИТЬ ИЗ tbl_users WHERE name =?")) {// Привязать переменную к параметру как строку. $ stmt-> bind_param ("s", $ name); // Выполняем инструкцию. $ stmt-> выполнить (); // Закрываем подготовленный оператор. $ stmt-> закрыть (); }

Рекомендуемые: