现代浏览器中仍然可以使用基于DOM的XSS攻击吗?

时间:2012-03-04 13:48:34

标签: javascript dom xss

我目前正在研究XSS预防,但我对基于DOM的攻击有点困惑。我读过的关于这个主题的大多数论文给出了如果通过JavaScript而不是服务器端代码在页面中呈现值来通过URL参数注入JavaScript以修改DOM的示例。

但是,如果由JavaScript呈现,所有现代浏览器似乎都会编码通过URL参数提供的所有特殊字符。

这是否意味着除非针对IE6等旧版浏览器,否则无法执行基于DOM的XSS攻击?

2 个答案:

答案 0 :(得分:2)

他们绝对可能。如果不过滤源自用户的输出,则该输出可以是任何内容,包括脚本。浏览器无法知道它是否是您控制的合法脚本。

这不是现代浏览器的问题,它的基本原则是浏览器将来自您域的每个内容视为合法执行。

现代浏览器确实阻止了其他方面(有时并非总是如此)(尽管存在安全漏洞),如跨域脚本,第三方访问资源等。

答案 1 :(得分:2)

忘掉10年前那些老式的XSS示例。编写javascript来渲染页面的程序员通过从查询参数中取消一些未被解决的东西,或者在很久以前被解雇或切换到像angular / backbone这样的框架。

然而,反映/存储的XSS仍然广泛存在。这需要从服务器端和客户端适当地转义。现代框架都为渲染HTML时转义敏感字符提供了很好的支持。例如,当从模型数据渲染视图时,angular具有$ sce(严格上下文转义)服务(https://docs.angularjs.org/api/ng/service/ $ sce)来解决可能的XSS威胁。骨干模型也有类似“model.escape(attribute)”(http://backbonejs.org/#Model-escape)的方法来消除XSS威胁。

相关问题