HtmlPolicyBuilder href 在 java 代码中使用 PolicyFactory.sanitize 后不会进入 <u >tag


<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();  

我也面临着同样的问题,以及表和 tr 元素。样式属性也不在表和 tr 元素下。

任何建议/帮助不胜感激。 提前谢谢。

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

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

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

正如上面的答案,在.allowUrlProtocols("javascript")中添加javascript将允许通过,但是随着"("")"进入特殊字符,您仍然会在javascript:toggleTable('*****')中获得UTF编码"("")"

您的输出将如下所示javascript:toggleTable0028'*****'0029

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

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

相关内容

最新更新