防止站点范围内的XSS攻击

时间:2010-09-03 18:37:20

标签: javascript html security coldfusion xss

我是ColdFusion的新手,所以我不确定是否有一种简单的方法可以做到这一点。我被指派在这个CF站点修复站点范围内的XSS漏洞。不幸的是,有大量的页面正在接受用户输入,并且几乎不可能进入并修改它们。

是否有办法(在CF或JS中)轻松防止整个站点的XSS攻击?

4 个答案:

答案 0 :(得分:35)

我讨厌把它分给你,但是 -

  1. XSS是输出问题,是输入问题。过滤/验证输入是一个额外的防御层,但它永远无法完全保护您免受XSS的侵害。看一下XSS cheatsheet by RSnake - 逃避过滤器的方法太多了。
  2. 没有简单的方法来修复遗留应用程序。您必须正确编码放在html或javascript文件中的任何内容,这意味着要重新访问生成html的每一段代码。
  3. 有关如何防止XSS的信息,请参阅OWASP's XSS prevention cheat sheet

    <小时/> 下面的一些评论表明输入验证是一种更好的策略,而不是在输出时编码/转义。我将引用OWASP's XSS prevention cheat sheet -

      

    传统上,输入验证是处理不受信任数据的首选方法。但是,输入验证不是注入攻击的理想解决方案。首先,输入验证通常在接收数据时,在目的地已知之前完成。这意味着我们不知道目标解释器中哪些字符可能很重要。其次,甚至可能更重要的是,应用程序必须允许潜在有害的字符。例如,如果可怜的O'Malley先生被禁止在数据库中注册,仅仅因为SQL认为是一个特殊字符?

    详细说明 - 当用户输入像O'Malley这样的字符串时,您不知道是否需要javascript,html或其他语言的字符串。如果是javascript,则必须将其呈现为O\x27Malley,如果是HTML,则应该看起来像O&#x27;Malley。这就是为什么建议在您的数据库中字符串应该以用户输入的方式完全存储,然后根据字符串的最终目的地适当地转义它。

答案 1 :(得分:1)

你应该注意的一件事是实现像Portcullis这样的应用防火墙:http://www.codfusion.com/blog/page.cfm/projects/portcullis其中包含一个强大的系统,然后是内置的scriptProtect,很容易被击败。

这是防止许多攻击的良好起点,但对于XSS,您将最终手动进入并验证您在任何可由客户端触及的输出上使用HTMLEditFormat()之类的内容或客户端数据,以防止输出有效的html / js代码。

答案 2 :(得分:0)

ColdFusion 9 Livedocs描述了一个名为“scriptProtect”的设置,它允许您利用coldfusion的保护。我还没有使用它,所以我不确定它有多有效。

但是,如果您实现第三方或您自己的处理方法,您很可能希望将其置于应用程序的“onRequestStart”事件中,以允许它在URL方面处理整个站点和FORM范围违规(因为每个请求都会执行该代码)。

答案 3 :(得分:0)

除了应用所有ColdFusion热修复和补丁之外,您还可以:

  1. 不完全证明但有帮助,在CFADMIN&gt;下设置以下内容设置&gt; “启用全局脚本保护”
  2. 将CSRFToken添加到表单http://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet
  3. 检查http Referer
  4. 为所有用户输入添加验证
  5. 使用cfqueryparam进行查询
  6. 在任何输出上添加HTMLEditFormat()
  7. 除了Peter Freitag的优秀博客,您还应该订阅Jason Dean的http://www.12robots.com