Концепция очистки ввода никогда не имела для меня особого смысла. Он основан на предположении, что некоторые виды ввода опасны, но в действительности не существует такой вещи, как опасный ввод; Просто код, который неправильно обрабатывает ввод.
Причиной этого является то, что если вы встраиваете переменную в некую строку (код), которая затем оценивается любым интерпретатором, , вы должны убедиться, что переменная правильно экранирована . Например, если вы встраиваете строку в оператор SQL, вы должны заключить в кавычки и экранировать определенные символы в этой строке. Если вы встраиваете значения в URL, вы должны экранировать его с помощью urlencode
. Если вы встраиваете строку в документ HTML, вы должны экранировать с помощью htmlspecialchars
. И так далее, и тому подобное.
Попытка «очистить» данные заранее - обреченная стратегия, потому что вы не можете знать - в какой момент - в каком контексте будут использоваться данные. Печально известная magic_quotes анти-функция PHP, является ярким примером этой ошибочной идеи.