Давайте кратко рассмотрим ПОЧЕМУ экранирование необходимо в разных контекстах:
Если вы находитесь в строке с разделителями-кавычками, вам нужно иметь возможность экранировать кавычки.
Если вы находитесь в XML, то вам нужно отделить «контент» от «разметки»
Если вы используете SQL, вам нужно отделить «команды» от «данных»
Если вы находитесь в командной строке, вам нужно отделить «команды» от «данных»
Это действительно базовый аспект вычислений в целом. Поскольку синтаксис, который разделяет данные, может встречаться в ДАННЫХ, должен быть способ отличить ДАННЫЕ от СИНТАКСА, следовательно, экранировать.
В веб-программировании наиболее распространенными примерами экранирования являются:
1. Вывод текста в HTML
2. Вывод данных в атрибуты HTML
3. Вывод HTML в HTML
4. Вставка данных в Javascript
5. Вставка данных в SQL
6. Вставка данных в команду оболочки
Каждый из них имеет различные последствия для безопасности, если обрабатывается неправильно. ЭТО ДЕЙСТВИТЕЛЬНО ВАЖНО! Давайте рассмотрим это в контексте PHP:
Текст в HTML:
htmlspecialchars (...)
Данные в атрибутах HTML
htmlspecialchars (..., ENT_QUOTES)
HTML в HTML
Используйте библиотеку, например HTMLPurifier , чтобы УБЕДИТЬСЯ, что присутствуют только допустимые теги.
Данные в Javascript
Я предпочитаю json_encode
. Если вы помещаете его в атрибут, вам все равно нужно использовать # 2, например
Вставка данных в SQL
У каждого драйвера есть функция escape (). Это лучше. Если вы работаете в обычном латинском наборе символов, подходит добавочная черта (...). Не забудьте про кавычки Вокруг вызова addlashes ():
"INSERT INTO table1 SET field1 = '". addlashes ($ data). "'"
Данные в командной строке
escapeshellarg () и escapeshellcmd () - прочитайте инструкцию
-
Примите это близко к сердцу, и вы устраните 95% * общих рисков веб-безопасности (* предположение)