【问题标题】:Are DOM based XSS attacks still possible in modern browsers?在现代浏览器中是否仍然可以进行基于 DOM 的 XSS 攻击?
【发布时间】:2015-07-07 22:25:05
【问题描述】:

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

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

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

【问题讨论】:

  • 我很好奇 - 为什么这个问题被否决了?

标签: javascript dom xss


【解决方案1】:

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

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

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

【讨论】:

  • 我明白了,我想我有点误解了 DOM 攻击是如何工作的。我看到的所有示例都包含 URL 中的脚本标签,但是当我尝试复制它们的示例时,特殊字符会被编码。绕过服务器端代码的基于 DOM 的攻击还有哪些其他方式?
  • 请查看这些类型的攻击:owasp.org/index.php/DOM_Based_XSS 以及防止它们的方法:owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet
  • @Ofer Zelig - 我看过这些链接,但他们的 DOM 攻击示例不起作用,输出由 JavaScript 自动编码。从我读过的论文来看,服务器端预防应该对基于 DOM 的攻击无效。因此,我试图了解如何在没有服务器干预的情况下完成此操作。
【解决方案2】:

忘掉那些 10 年前的老式 XSS 示例吧。很久以前,那些通过从查询参数中获取未转义的东西来编写 javascript 来呈现页面的程序员要么被解雇,要么切换到像 angular/backbone 这样的框架。

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

【讨论】:

    猜你喜欢
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2019-12-11
    • 1970-01-01
    • 2013-07-03
    • 2016-04-18
    相关资源
    最近更新 更多