Когда использовать метод стирания строки?

Хорошо, поэтому есть все эти различные функции экранирования строки, такие как htmlentities() , mysql_real_escape_string() , addslashes()

Но что я должен использовать в какой ситуации?
Ресурсы и мнения, пожалуйста 🙂

Solutions Collecting From Web of "Когда использовать метод стирания строки?"

  • addslashes () / stripslashes () восходит к довольно плохой идее под названием «Magic Quotes», которая с тех пор устарела. Он автоматически ускользал от специальных символов, и вы могли бы использовать addlashes () и stripslashes () для их добавления или удаления. Одна из проблем заключалась в том, что вы никогда не были уверены в том, что данные в настоящее время имеют слэш или нет, и, таким образом, вы закончили тем, что помещали несвязанные данные в SQL или имели дополнительные слэши на своей веб-странице.
  • htmlentities () часто используется для отображения HTML на странице. Если вы попытаетесь написать <b>Something</b> на HTML-страницу, вы увидите « Кое-что» (т. Е. Исходный текст выделен жирным шрифтом) – вы не увидите ярких меток вокруг него. Использование htmlentities('<b>Something</b>') преобразует код в <b> Something <b>, поэтому в браузере вы видите скобки треугольника.
  • mysql_real_escape_string () полезен для защиты от атак MySQL-инъекций – он избегает небезопасных символов в строках. Он не избегает ничего в других типах данных, и поэтому их нужно рассматривать отдельно. Он также не кодирует% и _, которые используются в качестве подстановочных знаков в некоторых запросах.

В итоге:

  • Если вы кодируете для записи на HTML-страницу, используйте htmlentities ()
  • Если вы кодируете строку для записи в базу данных, используйте mymysql_real_escape_string ()
  • Никогда не используйте addlashes ()

который я должен использовать в какой ситуации?

  • htmlentities (). никогда не используйте его, но htmlspecialchars() . Для печати недоверенного ввода пользователем в браузер.
  • mysql_real_escape_string – это функция, специфичная для базы данных mysql. вот полное руководство, которое я написал точно по теме, где его использовать, а где нет и что еще нужно знать о безопасности базы данных mysql
  • addslashes (). это зависит. большую часть времени вам это совсем не нужно

когда вы вставляете данные в базу данных 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.