在 java 代码中使用 PolicyFactory.sanitize 后,HtmlPolicyBuilder href 未出现在 <u > 标签中

HtmlPolicyBuilder href is not coming in <u >tag after using PolicyFactory.sanitize in java code

<u href="javascript:toggleTable('*****')" onMouseOver="this.style.color='red'" onMouseOut="this.style.color='#000000'">*****</u>

清理 href 属性后 th 标签下的上方元素未出现,如下所示:

<u onmouseover="this.style.color='red'" onmouseout="this.style.color='#000000'">*****</u>

下面是我试图在 u 元素下允许 href 属性的代码片段:

PolicyFactory html = new HtmlPolicyBuilder()
.allowElements("u")
.allowAttributes("href", "onMouseOver", "onMouseOut").onElements("u")
.allowTextIn("u")
.allowCommonBlockElements()
.allowCommonInlineFormattingElements()
.allowStandardUrlProtocols()
.allowUrlProtocols("href")
.allowStyling()
.requireRelNofollowOnLinks()
.allowAttributes("href").globally()
.toFactory();  

我在 table 和 tr 元素上也遇到了同样的问题。样式属性不在 table 和 tr 元素下。

任何 suggestion/help 表示赞赏。 提前致谢。

正在删除 href 属性,因为它没有允许的协议。如果 .allowUrlProtocols("href") 更改为 .allowUrlProtocols("javascript") 则允许。

允许 javascript URL,或 onMouseOveronMouseOut 属性将允许执行脚本并容易受到 XSS 攻击。

相反,您可以更改设计。鼠标悬停样式不需要 JavaScript。可以通过 CSS :hover 选择器来完成。

如上面的答案一样,在 .allowUrlProtocols("javascript") 中添加 javascript 将允许通过,但是您仍然会在 [=15= 中获得 UTF 编码的 "(" & ")" ] 因为 "(" & ")" 进入特殊字符。

你的输出看起来像 javascript:toggleTable0028'*****'0029

要使其正常工作,您必须将其替换为字符串函数 replace。

sanitizer.sanitize(HTML).replace("0028", "(").replace("0029",")");