如果我提交具有固定内容的输入复选框或单选或选择,它是否会受到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 证书。您可以获得 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 或预准备语句。