我们目前正在使用OWASP Antisamy项目来保护我们的应用程序免受XSS攻击.当任何给定表单提交给服务器时,每个输入字段都被清理.它工作正常,但我们在公司名称,组织名称等字段方面存在问题.
例如:Ampersand为AT&T进行转义,公司名称显示错误(显示转义字符).
我们手动更新数据库中的字段以解决此问题.然而,你可以想象这是一个痛苦的脖子.
有没有办法使用OWASP反歧视来解决这个问题,还是应该使用不同的库?
您应该只在输出上编码,而不是在输入上编码.如果用户输入AT&T
您的应用程序,则应将其存储在AT&T
数据库中.不需要对其进行编码,但当然要确保使用参数化查询,这将阻止诸如'
打破SQL命令上下文和导致SQL注入之类的字符.
输出时,这是您需要对字符进行编码的唯一时间.例如,AT&T
应该AT&T
在输出到HTML时编码,因此它在浏览器中显示为AT&T
.
看起来您的应用程序正在对输入进行编码并对输出进行编码,因此上面的字符串将AT&T
在HTML 输出时进行双重编码,从而导致问题.删除输入编码以解决此问题.
您应该仅在输出时编码的原因是,如果您决定要将数据输出到其他格式(如JSON或JavaScript),则编码是不同的.O'leary
将成为O\x27leary
如果适当地编码为JavaScript,这不会在编码是HTML正确显示O'leary
.