我是 ColdFusion 的新手,所以我不确定是否有一种简单的方法可以做到这一点。我被指派在这个 CF 站点上修复整个站点的 XSS 漏洞。不幸的是,有大量页面需要用户输入,几乎不可能全部修改。
有没有办法(在 CF 或 JS 中)轻松防止整个站点的 XSS 攻击?
最佳答案
我不想告诉你,但是 -
- XSS 是一个输出问题,不是输入问题。过滤/验证输入是额外的防御层,但它永远无法完全保护您免受 XSS 攻击。看看XSS cheatsheet by RSnake - 逃避过滤器的方法太多了。
- 没有简单的方法来修复遗留应用程序。您必须对放入 html 或 javascript 文件中的任何内容进行正确编码,这意味着重新访问生成 html 的每一段代码。
参见 OWASP's XSS prevention cheat sheet有关如何防止 XSS 的信息。
下面的一些评论表明输入验证是一种更好的策略,而不是在输出时进行编码/转义。我只引用 OWASP's XSS prevention cheat sheet -
Traditionally, input validation has been the preferred approach for handling untrusted data. However, input validation is not a great solution for injection attacks. First, input validation is typically done when the data is received, before the destination is known. That means that we don't know which characters might be significant in the target interpreter. Second, and possibly even more importantly, applications must allow potentially harmful characters in. For example, should poor Mr. O'Malley be prevented from registering in the database simply because SQL considers ' a special character?
详细说明 - 当用户输入像 O'Malley 这样的字符串时,您不知道是否需要在 javascript、html 或其他语言中使用该字符串。如果它在 javascript 中,你必须将它呈现为 O\x27Malley
,如果它在 HTML 中,它应该看起来像 O'Malley
。这就是为什么建议在您的数据库中将字符串存储完全按照用户输入的方式,然后根据字符串的最终目的地适本地转义它。
关于javascript - 防止站点范围内的 XSS 攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3638619/