【发布时间】:2012-03-19 21:33:45
【问题描述】:
我一直在使用 Apache 的 StringEscapeUtils 来处理 HTML 实体,但是如果你想转义 HTML 属性值,有没有标准的方法可以做到这一点?我猜使用escapeHtml 函数不会解决问题,否则为什么Owasp
Encoder interface 会有两种不同的方法来处理这个问题?
有谁知道转义 HTML 属性与实体之间的关系以及在没有 Owasp 库可用的情况下如何处理属性编码?
【问题讨论】:
我一直在使用 Apache 的 StringEscapeUtils 来处理 HTML 实体,但是如果你想转义 HTML 属性值,有没有标准的方法可以做到这一点?我猜使用escapeHtml 函数不会解决问题,否则为什么Owasp
Encoder interface 会有两种不同的方法来处理这个问题?
有谁知道转义 HTML 属性与实体之间的关系以及在没有 Owasp 库可用的情况下如何处理属性编码?
【问题讨论】:
看起来这是Owasp's XSS Prevention Cheat Sheet 的规则#2。注意是说的位:
正确引用的属性只能用相应的转义 引用
因此,我想只要属性正确地用双引号或单引号界定并且您将这些转义(即双引号(“)变为 " 并且单引号 (') 变为 '(或 ' ;)) 那么你应该没问题。注意 Apache 的 StringEscapeUtils.escapeHtml 将 insufficient 用于此任务,因为它不会转义单引号 (');您应该使用 String 的 replaceAll 方法来这样做。
否则,如果属性写成:<div attr=some_value>,那么你需要按照该页面上的建议和..
使用 HH; 转义所有 ASCII 值小于 256 的字符 格式(或命名实体,如果可用)以防止切换出 属性
但不确定是否有非 Owasp 标准实现。但是,无论如何最好不要以这种方式编写属性!
请注意,这仅在您输入标准属性值时有效,如果该属性是 href 或某些 JavaScript 处理程序,那么情况就不同了。有关事件处理程序属性中的不安全代码可能发生的 XSS 脚本攻击示例,请参阅:http://ha.ckers.org/xss.html。
【讨论】: