输入复选框/无线电/选择是否容易受到 XSS 的攻击


Are input checkbox/radio/select vulnerable from XSS?

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