2012-03-28 2 views
2

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

+0

Защита от инъекции SQL уже хорошо укрытым повсюду. Вы также можете рассмотреть подготовленные заявления. – GordonM

ответ

5

nl2br в основном преобразует все "\n" в "<br/>", так что я не вижу, как это помогает с SQL Injection (не mysql injection btw)

mysql_real_escape_string обычно используется для такого рода thi нг.

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

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

Еще лучше и более безопасная альтернатива для обеспечения безопасности базы данных является использование mysqlihttp://sg.php.net/mysqli, он предоставляет подготовленное заявление, чтобы помочь вам отфильтровать ваш SQL

+0

Это неверное описание. 'mysqli' не« автоматически »фильтрует sql. Вы должны использовать специально подготовленные заявления. Было бы очень легко построить запрос с инжекцией в 'mysqli' (или любая обертка DB, используемая ненадлежащим образом). –

+0

@tandu, что лучше? –

+0

Да, я так думаю. –

0

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

3

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

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

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

  • побег для хранения
  • Encode для отображения
Смежные вопросы