我是ColdFusion的新手,所以我不确定是否有一种简单的方法可以做到这一点。我被指派在这个CF站点修复站点范围内的XSS漏洞。不幸的是,有大量的页面正在接受用户输入,并且几乎不可能进入并修改它们。
是否有办法(在CF或JS中)轻松防止整个站点的XSS攻击?
答案 0 :(得分:35)
我讨厌把它分给你,但是 -
有关如何防止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'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热修复和补丁之外,您还可以: