Как я могу предотвратить инъекцию SQL, но сохранить "и"? - PullRequest
1 голос
/ 06 февраля 2011

Как предотвратить инъекцию sql в php, но по-прежнему показывать "и"? А в тот момент, когда я использую

$input = strip_tags($input);
$input = htmlentities($input);

Однако вывод \ "и \"Могу ли я в любом случае показать "и" без косых черт, но держать их там, чтобы мне не делали инъекции?

Ответы [ 4 ]

5 голосов
/ 06 февраля 2011

Показанный вами метод не является подходящим способом защиты от внедрения SQL!

Всегда используйте метод очистки, предоставляемый библиотекой базы данных, которую вы используете, например, mysql_real_escape_string() если вы работаете со стандартной библиотекой mysql. Метод санации не изменит никаких символов в конечном результате.

В качестве альтернативы, используйте подготовленные операторы в PDO или mysqli - они автоматически вводят данные, если вы правильно связываете входящие данные.

1 голос
/ 06 февраля 2011

Во-первых, этот код не удаляет обратную косую черту, конечно, он все еще там.Используйте полоски (), чтобы убрать обратную косую черту, но НЕ ДЕЛАЙТЕ ЭТОГО.Если вы видите эти косые черты в БД и ИСПОЛЬЗУЕТЕ mysql_real_escape_string, скорее всего, у вас есть magic_quotes_gpc, и вы просто добавляете еще один набор slahses.Сначала удалите те, которые были добавлены автоматически, а затем примените mysql_real_escape_string, они не будут отображаться таким образом, но все равно будут там и будут использоваться для безопасного использования вашей базы данных.

1 голос
/ 06 февраля 2011

Используйте подготовленные заявления.
http://de2.php.net/manual/en/pdostatement.bindparam.php
ИЛИ
http://de2.php.net/manual/en/mysqli-stmt.bind-param.php

0 голосов
/ 06 февраля 2011

Не существует волшебного решения для того, чтобы быть небрежным.

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

В любом случае отключите magic_quotes.Используйте ручное экранирование (mysql_real_escape_string) или, что еще лучше, гораздо более удобные подготовленные операторы с PDO.

Если вы хотите быть ленивым, по-прежнему отключайте magic_quotes.Но используйте $_GET = array_map("mysql_real_escape_string", $_GET); и сделайте то же самое для $ _POST и $ _REQUEST в начале ваших сценариев и после установления соединения с базой данных.
А затем примените htmlentities(stripslashes($input)) для записи выходных данных, чтобы избавиться от посторонних обратных косых черт.1010 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...