security - 保护应用程序免受 XSS 攻击

标签 security xss owasp

我们目前正在使用 OWASP Antisamy 项目来保护我们的应用程序免受 XSS 攻击。当任何给定的表单提交给服务器时,每个输入字段都会被清理。它工作正常,但我们在公司名称、组织名称等字段上遇到问题。

例如:AT&T 的 & 号被转义,公司名称显示错误(显示为转义字符)。

我们手动更新数据库中的字段以解决此问题。然而,这是一个你可以想象的脖子痛。

有没有办法使用 OWASP antisamy 来解决这个问题,还是我们应该使用不同的库?

最佳答案

您应该只对输出 进行编码,而不是对输入进行编码。如果用户在您的应用程序中输入 AT&T,这应该存储在数据库中的 AT&T 中。无需对其进行编码,但当然要确保您使用的是参数化查询,这将防止诸如 ' 之类的字符脱离 SQL 命令上下文并导致 SQL 注入(inject)。

当你输出时,这是你唯一需要对字符进行编码的时候。例如AT&T在输出为HTML时应编码为AT&T,因此在浏览器中显示为AT&T

您的应用程序似乎正在对输入进行编码,同时也在对输出进行编码,因此像上面这样的字符串将在您的 HTML 中被双重编码,然后输出为 AT&T,从而导致问题。删除您的输入编码以解决此问题。

您应该只在输出时进行编码的原因是,如果您决定要将数据输出为不同的格式(例如 JSON 或 JavaScript),那么编码就会不同。如果为 JavaScript 正确编码,O'leary 将变为 O\x27leary,在编码为 O'leary 的 HTML 中将无法正确显示>.

关于security - 保护应用程序免受 XSS 攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22977849/

相关文章:

java - 如何使用过滤器进行输出编码来防止XSS?

Laravel 在 blade 中使用 {!!nl2br(e())!!} 安全吗

java - 抑制某些依赖项中 JAR 的 OWASP 结果

java - 我在哪里可以找到 ESAPI.properties?

java - 如何获取用php发布的小程序数据?

security - OpenID Connect 与无状态 JWT token

xss - 跨站脚本攻击和同源策略

php - PHP中的CSRF(Cross-site request forgery)攻击示例和预防

c - 如何使用格式化字符串攻击

java - Swing 中的瘦客户端与 MySql 直接之间的安全问题