Хорошо, поэтому есть все эти различные функции экранирования строки, такие как htmlentities()
, mysql_real_escape_string()
, addslashes()
Но что я должен использовать в какой ситуации?
Ресурсы и мнения, пожалуйста 🙂
<b>Something</b>
на HTML-страницу, вы увидите « Кое-что» (т. Е. Исходный текст выделен жирным шрифтом) – вы не увидите ярких меток вокруг него. Использование htmlentities('<b>Something</b>')
преобразует код в <b> Something <b>, поэтому в браузере вы видите скобки треугольника. В итоге:
который я должен использовать в какой ситуации?
htmlspecialchars()
. Для печати недоверенного ввода пользователем в браузер. когда вы вставляете данные в базу данных mysql, используйте это:
mysql_real_escape_string()
когда вы собираетесь отображать контент, который пользователь дал вам:
htmlentities()
если у вашей базы данных нет собственной функции в php, вы можете использовать: addslashes()
, но не рекомендуется использовать, когда у вас есть что-то конкретное, что лучше (mysql_real_escape_string ()).
см. это для получения дополнительной информации:
Htmlentities против addlashes vs mysqli_real_escape_string
PS вы должны использовать mysqli_real_escape_string (), а не mysql_real_escape_string ().
РЕДАКТИРОВАТЬ:
чтобы действительно предотвратить атаки, это хороший материал для чтения: http://www.php.net/manual/en/security.database.sql-injection.php …
Вы также должны посмотреть подготовленные заявления: http://www.php.net/manual/en/mysqli.prepare.php
здесь имеется много информации о переполнении стека.
Это все варианты по одной теме:
$bar = "O'Reilly"; "foo = '$bar'"; // foo = 'O'Reilly' -> invalid syntax
Слепо конкатенация строк вместе может привести к нарушениям синтаксиса, если строки должны следовать специальному синтаксису. В лучшем случае это раздражение, в худшем – проблема безопасности. Эквивалентные значения предотвращают эти проблемы. Общий пример:
"foo = '" . escape($bar) . "'"; // foo = 'O\'Reilly'
Все разные функции обеспечивают правильное выравнивание значений для разных синтаксисов:
htmlentities
для вывода вывода для HTML.
mysql_real_escape_string
для экранирования значений для SQL-запросов.
addslashes
… не очень хорошо для чего-либо, не используйте.
json_encode
для кодирования / экранирования / преобразования значений для формата Javascript.