HTTP X-XSS-Protection响应标头是否足以处理反射的XSS攻击

时间:2018-04-23 09:57:07

标签: angularjs node.js xss

我是网络应用程序开发的新手。我的应用程序使用的是AngularJS \ NodeJS。报告的安全工具反映了我们的应用程序中的XSS漏洞。从我在互联网上的搜索,我发现有一个HTTP X-XSS-Protection响应标头,它似乎可以保护应用程序免受反射的XSS攻击。但是,我不确定这是否足以处理反映的XSS攻击,或者还应该在应用程序中进行任何输入清理。

2 个答案:

答案 0 :(得分:1)

X-XSS-Protection是不够的,并且在大多数浏览器中默认已启用。它所做的只是它在浏览器中启用了内置的XSS保护,但诀窍是,据我所知(也许有人会纠正我),没有具体说明浏览器应该做什么。根据我的经验,当脚本标记之间存在javascript参数时,浏览器只会过滤最琐碎的XSS - 这样的参数中的javascript将无法运行。例如,如果参数是

something <script>alert(1)</script> something

这不会由浏览器运行。显然就是这样。

例如,如果您有像

这样的服务器端代码
<div class="userclass-{{$userinput}}">

然后可以使用字符串abc" onclick="alert(1)" x="来利用它,这将在我尝试的任何浏览器中通过内置过滤器。

然后我们还没有谈到存储或DOM XSS,这种保护完全没用。

使用Angular,让你的代码容易受到XSS的攻击有点困难(例如,参见here如何将内容绑定为html),但这远非不可能,因为你几乎不需要实际的脚本标记,这个内置保护在Angular应用程序中使用非常有限。

虽然输入验证/清理很好,但实际上对XSS实际需要的是输出编码。使用Angular,这比许多其他框架更容易,但Angular不是灵丹妙药,您的应用程序仍然容易受到攻击。

简而言之,只要您在任何地方显示用户输入(更准确地说,只要您将用户输入插入到页面DOM中),就必须确保无法运行用户的javascript。这可以通过输出编码和安全的Javascript使用来实现,这可能意味着很多事情,主要是使用模板引擎或数据绑定,只能将东西绑定为文本,而不是其他任何东西(例如标签)。 / p>

答案 1 :(得分:1)

X-XSS-Protection的功能取决于浏览器,不能依赖于安全性。它是一个额外的层,使得利用易受攻击的应用程序变得更加困难,但并不意味着可以替代正确的编码。这是一个警告,应用程序易受攻击,修复它的责任在于应用程序开发人员。

这就是为什么在Chrome中,XSS过滤器中的错误甚至不被视为安全漏洞。请参阅Chrome Security FAQ

  

XSS过滤器是否会绕过安全漏洞?

     

没有。 Chromium包含一个反射的XSS过滤器(称为XSSAuditor)   是反映XSS缺陷的最佳努力的第二道防线   在网站上找到。我们不会将这些绕过视为安全漏洞   Chromium因为底层问题出现在网站本身。我们   将它们视为功能性错误,我们非常感谢这些报道。

     

XSSAuditor无法防御持久性XSS或   基于DOM的XSS。还会有很多不常发生的事情   然而,反映了XSS角落的情况,它永远无法实现   覆盖。其中包括:

     
      
  • 注入页面的多个未过滤的变量。
  •   
  • 意外的服务器端转换或有效负载解码。
  •   

并且有很多错误。有一些方法可以定期绕过过滤器。就在上周,有一个相当简单的injected style attribute旁路。

这样的过滤器需要通过仅查看输入和输出来判断输出中的值来自哪里,而不会看到任何模板或服务器端代码。当对输入进行任何处理,或者发生多种解码,或者将多个值组合在一起时,这可能非常困难。

更容易在模板级别处理编码。在这里,我们可以很容易地区分变量值和静态代码之间的区别,因为它们尚未合并在一起。