HtmlPolicyBuilder href不会出现<;u>;在java代码中使用PolicyFactory.sanitize后的标记

HtmlPolicyBuilder href不会出现<;u>;在java代码中使用PolicyFactory.sanitize后的标记,java,xss,owasp,cross-site,html-sanitizing,Java,Xss,Owasp,Cross Site,Html Sanitizing,表和tr元素也面临同样的问题。样式属性不在表和tr元素下 任何建议/帮助都将不胜感激。 提前感谢。正在删除href属性,因为它没有允许的协议。如果将.allowUrlProtocols(“href”)更改为.allowUrlProtocols(“javascript”),则允许这样做 允许javascripturl,或onMouseOver和onMouseOut属性将允许执行脚本,并且容易受到XSS攻击 相反,您可以更改设计。鼠标悬停样式不需要JavaScript。这可以通过CSS:悬停选择器来

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

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

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

允许
javascript
url,或
onMouseOver
onMouseOut
属性将允许执行脚本,并且容易受到XSS攻击


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

作为上面的答案,在
中添加
javascript
。allowUrlProtocols(“javascript”)
将允许通过,但在哪里仍然可以得到UTF编码的
“(
&
”)
javascript:toggleTable('*****')
作为
进入特殊字符

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

要使其工作,您必须用字符串函数replace替换它

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();  
<u onmouseover="this.style.color='red'" onmouseout="this.style.color='#000000'">*****</u>
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();  
sanitizer.sanitize(HTML).replace("0028", "(").replace("0029",")");