Если я отправлю флажок ввода или радио или выберите, которые имеют фиксированный контент, может ли он быть уязвимым от XSS? Если да, то как? Как предотвратить?
XSS может произойти, когда некоторые элементы вашей страницы генерируются с использованием введенной пользователем информации.
Посмотрите на следующий фрагмент:
<input type="checkbox" value="<?php echo $variableContainingUserInput; ?>" />
Если ваш пользователь ввел следующую строку:
" /> <script> window.location = "maliciouswebsite.com"; </script>
Результирующий HTML будет выглядеть так:
<input type="checkbox" value="" /> <script> window.location = "maliciouswebsite.com"; </script>" />
Это фактически перенаправит пользователя на указанный вредоносный веб-сайт.
Короче говоря, все, что отправлено пользователем, может быть опасным, если оно попадет на любую страницу вашего сайта.
Вот Похожий вопрос на SO.
Фиксированный контент или нет, это не имеет значения. «Злоумышленник» может изменить это, если захочет. Но … даже если это не изменилось: все уязвимо для XSS, если это зависит от данных, отправленных клиентом.
Как это предотвратить?
избежать всего!
Как это сделать … это зависит … вы можете сделать это на стороне сервера (PHP и т. Д.) Или на стороне клиента (javascript). Но не полагайтесь на JavaScript. Злоумышленник может заставить данные не быть разнесены или проанализированы javascript.
Так что …. сбежать на стороне сервера
PHP:
$safeData = htmlentities($vulnerableData);
Если пользователь может видеть его, он может изменить его. Всегда проверяйте каждый вход.
В предотвращении XSS есть много вещей, на которые нужно обратить внимание. Это должно охватывать большинство вещей на стороне сценариев плюс, если у вас есть конфиденциальная информация, вы должны действительно использовать Сертификат SSL из надежного источника, такого как Verisign или тех, кто застрахован. Вы можете получить 128 или 256-битные сертификаты, в зависимости от того, что вы храните. Это всего лишь сценарии, вы также должны убедиться, что вы используете правильные функции БД для безопасного хранения данных.
Кроме того, проверьте это, когда у вас есть шанс охватить большую часть того, что вы спрашиваете:
https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet
если вам нужны советы о том, как обеспечить безопасность полей ввода, выполните это в верхней части Сертификат SSL:
Предотвращение межсайтовых скриптовых атак
@ref: http://www.sitepoint.com/php-security-cross-site-scripting-attacks-xss/
Вы также можете использовать токены формы
<?php
$token = md5(time());
$fp = fopen('./tokens.txt', 'a');
fwrite($fp, "$token\n");
fclose($fp);
?>
<form method="POST">
<input type="hidden" name="token" value="<?php echo $token; ?>" />
<input type="text" name="message"><br />
http://phpsec.org/projects/guide/2.html
после того, как вы сделали все, что есть сторона хранения базы данных. не используйте функции mysql_ *, но используйте PDO или подготовленные операторы.