SQL — Инъекции

SQL — Инъекции

От автора: если у вас применяется ввод данных пользователем через веб-страницу с последующей их вставкой в базу данных SQL, существует вероятность, что у вас могут возникнуть проблемы с безопасностью. Связано это с таким явлением, как SQL инъекция. В этой главе мы рассмотрим, как решить данную проблему, и защитить ваши скрипты и инструкции SQL в скриптах на стороне сервера, например, PERL Script.

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

В приведенном ниже примере для name могут использовать только буквенно-цифровые символы плюс подчеркивание и оно может иметь в длину от 8 до 20 символов (при необходимости вы можете изменить эти правила).

Бесплатный курс по PHP программированию

Освойте курс и создайте динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

Давайте рассмотрим следующий пример:

Предполагается, что вызов функции должен получить запись из таблицы CUSTOMERS, где столбец name соответствует имени, указанному пользователем. Обычно $name содержит только буквенно-цифровые символы и, возможно, пробелы. Но здесь к $name добавляется совершенно новый запрос, который при выполнении вызывает катастрофические последствия; DELETE-запрос удаляет все записи из таблицы CUSTOMERS.

К счастью, если вы используете MySQL, функция mysql_query() не допускает стекирование запросов или выполнение нескольких SQL-запросов в одном вызове функции. Если вы попытаетесь выполнить стек запросов, вызов завершится ошибкой.

Тем не менее, другие расширения базы данных PHP, такие как SQLite и PostgreSQL, принимают стекированые запросы, выполняя все запросы в одной строке, что приводит к серьезным проблемам с безопасностью.

Предотвращение SQL-инъекций

Вы можете контролировать ввод символов escape с помощью скриптовых языков, таких как PERL и PHP. Расширение MySQL для PHP предоставляет функцию mysql_real_escape_string(), которая предотвращает ввод символов, имеющих в MySQL особое значение.

Проблемы связанные с LIKE

Чтобы не допускать проблем, связанных с LIKE, пользовательский механизм экранирования должен преобразовывать символы «%» и «_» в их буквальные соответствия. Для этого используется функция addcslashes(), которая позволяет указать диапазон символов для экранирования.

Источник: https://www.tutorialspoint.com/

Редакция: Команда webformyself.

Бесплатный курс по PHP программированию

Освойте курс и создайте динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

Хотите изучить MySQL?

Прямо сейчас посмотрите 24-х часовой курс по базе данных MySQL!

Смотреть курс

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (1)

  1. Андрей

    mysql? Вы серьёзно?))) Это расширение уже удалено из php

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Я не робот.

Spam Protection by WP-SpamFree