Какие методы SQL-инъекций не «уничтожаются» mysql_real_escape_string () ;? - PullRequest
4 голосов
/ 12 июля 2011

Есть ли список методов SQL-инъекций, которые нельзя защитить, просто используя mysql_real_escape_string(); с кодировкой utf8?

Для целых чисел я использую intval(); Достаточно ли безопасно?*

Для тех, кто думает, что я хочу получить "учебник", чтобы взломать кого-либо: нет, я не буду.Я просто хочу знать, как сделать свои приложения более безопасными, и я хочу знать, защищены ли они на 99% от хакеров

Ответы [ 3 ]

3 голосов
/ 12 июля 2011

Если задано действительное соединение с базой данных, mysql_real_escape_string() считается безопасным для строковых данных при любых обстоятельствах (за редким исключением, описанным в в этом ответе ).

Тем не менее, все, что находится за пределами строки, не исчезнет:

$id = mysql_real_escape_string($_GET["id"]);

mysql_query("SELECT * FROM table WHERE id = $id");

все еще уязвим, потому что вам не нужно «разрывать» строку, чтобы добавить злую дополнительную команду.

1 голос
/ 12 июля 2011

Существует не так много SQL инъекций. Они всегда происходят из-за того, что входные данные не были продезинфицированы и должным образом избежали. Таким образом, хотя mysql_real_escape_string() сделает любую строку безопасной для включения в запрос к базе данных, вы должны следовать следующим методам предотвращения, чтобы защитить ваши данные и пользователей от внедрения SQL.

  • Никогда не подключайтесь к базе данных как суперпользователь или как владелец базы данных. Используйте всегда настроенных пользователей с очень ограниченными правами.
  • Проверьте, имеет ли данный вход ожидаемый тип данных.
  • Если приложение ожидает числового ввода, рассмотрите возможность проверки данных с помощью is_numeric() или измените их тип молча, используя settype()
  • Заключите в кавычки каждое нечисловое значение, предоставленное пользователем, которое передается в базу данных с помощью функции escape-строки для конкретной базы данных. Так что mysql_real_escape_string() сделает все строки безопасными для включения в SQL-запрос к базе данных mysql
  • Вы также можете научиться использовать хранимые процедуры и подготовленные операторы, которые, как правило, очень безопасны, но имеют другие последствия

См. Также: Страница PHP о внедрении SQL

0 голосов
/ 12 июля 2011

Есть много вещей, которые могут не быть защищены стандартными методами (например, экранирование строк, int-трансляция), также в зависимости от версии используемого вами программного обеспечения. Например, utf-8 сам по себе является довольно серьезной проблемой. В качестве крошечного примера (среди многих) вы должны убедиться, что запрос действителен для utf-8 (или преобразовать его в utf-8). См. пример .

Как нездоровый проклятый веб-сайт, я думаю, что защиту от инъекций MySQL нельзя сжать в один SO-ответ, поэтому я включаю эти ссылки в качестве общих отправных точек.

http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/

А также: Поиск MySQL инъекций utf8

...