Защита текстовой области от MySQL инъекций - PHP - PullRequest
2 голосов
/ 28 марта 2012

У меня есть текстовое поле, значение которого будет вставлено в базу данных mysql.Чтобы защитить от внедрения MySQL, я должен обработать ввод через nl2br, mysql_real_escape_string, htmlentities, или комбинацию 2 или все 3?В каком порядке я обрабатываю данные?

Ответы [ 3 ]

5 голосов
/ 28 марта 2012

nl2br в основном преобразует все "\n" в "<br/>", поэтому я не вижу, как это помогает с SQL инъекцией (не MySQL инъекция кстати)

mysql_real_escape_string обычно используется для этого видавещей.

htmlentities используется для предотвращения несчастных случаев, когда пользователи внедряют вредоносные <script> в ваш сайт, если вы разрешаете ввод данных пользователем.Обратите внимание, что обычно принято хранить строку как есть и вызывать htmlentities всякий раз, когда вы выводите строку

Вам нужно знать, что делает каждый из вышеперечисленных, и использовать их только тогда, когда вам это нужно, а необъединяйте их, так как они могут разбить вещи еще хуже.

Еще одна лучшая и более безопасная альтернатива для защиты вашей базы данных - это использовать mysqli http://sg.php.net/mysqli,, она предоставляет подготовленное заявление, которое поможет вам отфильтровать ваш sql

3 голосов
/ 28 марта 2012

Обработка only , необходимая при вставке, mysql_real_escape_string, но предпочтительно использовать подготовленные операторы, возможно, с PDO или MDB2.

Никогда хранить закодированные данные в базе данных. Вы всегда должны хранить необработанные данные. То есть, не используйте nl2br или htmlentities для хранения. Однако вы должны использовать его для отображения , если данные будут вставлены в DOM (nl2br является чисто визуальным, htmlentities поможет защитить от XSS). Также обратите внимание, что htmlspecialchars может быть предпочтительным в зависимости от того, как вы хотите работать с дисплеем - этого должно быть достаточно для базовой защиты XSS.

Запомните эту мантру:

  • Escape для хранения
  • Код для отображения
0 голосов
/ 28 марта 2012

Если вы используете подготовленные операторы с PDO или mysqli, тогда вы просто привязываете параметр.Если вы используете старое расширение mysql, вам следует использовать mysql_real_escape_string().

...