基于DOM的XSS攻击在现代浏览器中仍然可能吗

Are DOM based XSS attacks still possible in modern browsers?

本文关键字:浏览器 DOM XSS 攻击 基于      更新时间:2023-09-26

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

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

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

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

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

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

忘记那些10年前的老式XSS示例吧。编写javascript以通过从查询参数中提取未跳过的内容来呈现页面的程序员早就被解雇了,或者换成了angular/backbone之类的框架。

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