Предотвращает ли XSS действительно то, что я должен запускать htmlspecialchars () КАЖДЫЙ раз я выдаю некоторый ввод пользователя? Например, каждый раз, когда я показываю имя пользователя? Кажется, очень утомительно.
Есть ли более простой способ?
Если вы беспокоитесь о том, чтобы быть объектом атаки, вы всегда должны следить за тем, чтобы формы были отправлены с вашего сайта, а не из внешнего источника. Вы можете использовать сеансы: если значение в сеансе, форма в порядке, в противном случае форма была отправлена с использованием бота.
Если вы беспокоитесь о размещении вредоносного сценария, то да, вам придется избегать всех введенных пользователем контента для публичного и административного потребления.
Это должно облегчить:
function h($string) { return htmlspecialchars($string); }
Возможно, вам захочется рассмотреть язык шаблонов, который позволит вам избежать ваших переменных:
Например. http://www.h2o-template.org/
Да, каждый раз.
Единственный простой способ – использовать шаблон, который сделает это за вас. Сделайте это самостоятельно или посмотрите на один, как XSLT или мой личный фейтер PHPTAL
это также зависит от типа контента, который вы ожидаете. Если, например, вы только ожидаете письма, вы можете сделать
$input = preg_replace("/[^a-zA-Z]*/", "", $input);
или если вы только ожидаете числа
$input = preg_replace("/[^0-9]*/", "", $input);
или если он будет смешанным, и другие символы будут ожидаться, тогда вам придется использовать
$input = htmlspecialchars($input, ENT_QUOTES, 'UTF-8');