<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")
则允许。
允许javascript
URL 或onMouseOver
和onMouseOut
属性将允许执行脚本并容易受到 XSS 攻击。
相反,您可以更改设计。鼠标悬停样式不需要 JavaScript。它可以在CSS:hover
选择器中完成。
正如上面的答案,在.allowUrlProtocols("javascript")
中添加javascript
将允许通过,但是随着"("
和")"
进入特殊字符,您仍然会在javascript:toggleTable('*****')
中获得UTF编码"("
和")"
。
您的输出将如下所示javascript:toggleTable0028'*****'0029
要使其工作,您必须将其替换为字符串函数替换。
sanitizer.sanitize(HTML).replace("0028", "(").replace("0029",")");