我一直在使用Apache的StringEscapeUtils
用于HTML实体,但是如果你想要转义HTML属性值,有没有一种标准的方法可以做到这一点?我想使用escapeHtml
函数不会削减它,否则为什么Owasp
Encoder interface有两种不同的方法可以解决这个问题?
有没有人知道在没有Owasp库的情况下,转义HTML属性与实体有什么关系以及如何处理属性编码?
答案 0 :(得分:8)
看起来这是Owasp's XSS Prevention Cheat Sheet的规则#2。注意位在哪里说:
适当引用的属性只能与相应的转义 报价
因此,我想只要属性被双引号或单引号正确限制就可以逃脱这些(即双引号(“)变为& quot;单引号(')变为'(或'))那么你应该没问题。请注意,Apache的StringEscapeUtils.escapeHtml
,因为它不会逃避单引号(');你应该使用String的replaceAll
方法来执行此操作。
否则,如果写入属性:<div attr=some_value>
,则需要按照该页面上的建议进行操作..
使用&amp; #xHH转义ASCII值小于256的所有字符; 格式(或命名实体,如果可用),以防止切换出来 属性
不确定是否有非Owasp标准的实现。但是,它认为最好不要以这种方式编写属性!
请注意,这仅在您输入标准属性值时有效,如果属性是href
或某个JavaScript处理程序,那么这是一个不同的故事。有关可能由事件处理程序属性中的不安全代码发生的可能的XSS脚本攻击的示例,请参阅:http://ha.ckers.org/xss.html。