在没有 Owasp 库的情况下,如何在 Java 中转义 HTML 属性值?

Posted

技术标签:

【中文标题】在没有 Owasp 库的情况下,如何在 Java 中转义 HTML 属性值?【英文标题】:How do you escape HTML attribute values in Java without the Owasp Library? 【发布时间】:2012-03-19 21:33:45 【问题描述】:

我一直在使用 Apache 的 StringEscapeUtils 来处理 html 实体,但是如果你想转义 HTML 属性值,有没有标准的方法可以做到这一点?我猜使用escapeHtml 函数不会解决问题,否则为什么Owasp Encoder interface 会有两种不同的方法来处理这个问题?

有谁知道转义 HTML 属性与实体之间的关系以及在没有 Owasp 库可用的情况下如何处理属性编码?

【问题讨论】:

【参考方案1】:

看起来这是Owasp's XSS Prevention Cheat Sheet 的规则#2。注意是说的位:

正确引用的属性只能用相应的转义 引用

因此,我想只要属性正确地用双引号或单引号界定并且您将这些转义(即双引号(“)变为 " 并且单引号 (') 变为 '(或 ' ;)) 那么你应该没问题。注意 Apache 的 StringEscapeUtils.escapeHtmlinsufficient 用于此任务,因为它不会转义单引号 (');您应该使用 String 的 replaceAll 方法来这样做。

否则,如果属性写成:<div attr=some_value>,那么你需要按照该页面上的建议和..

使用 HH; 转义所有 ASCII 值小于 256 的字符 格式(或命名实体,如果可用)以防止切换出 属性

但不确定是否有非 Owasp 标准实现。但是,无论如何最好不要以这种方式编写属性!

请注意,这仅在您输入标准属性值时有效,如果该属性是 href 或某些 javascript 处理程序,那么情况就不同了。有关事件处理程序属性中的不安全代码可能发生的 XSS 脚本攻击示例,请参阅:http://ha.ckers.org/xss.html。

【讨论】:

以上是关于在没有 Owasp 库的情况下,如何在 Java 中转义 HTML 属性值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 JSON.NET 库的情况下解析 JSON?

如何在没有外部库的情况下解析包含对象列表的对象列表

如何在没有JSON.NET库的情况下解析JSON?

如何在没有外部库的情况下在 React 中实现 Google Maps JS API?

如何在没有支持库的情况下将 MaterialToolbar 设置为 ActionBar

如何在没有外部库的情况下在 React 中播放/暂停视频?