我目前正在后端服务上使用owasp java library来清理客户端发送的HTML。 owasp java库有一个css规则的CSS白名单,它允许在html元素内的任何样式标记内。您可以找到白名单here。
我注意到有关此白名单的一件事是省略了display
属性。这意味着如果我创建如下代码的HTML代码:
<div style="margin-left:0px;display:none;"></div>
然后使用默认样式白名单的HTML清理程序将删除显示规则,并且保存在服务器上的HTML将是:
<div style="margin-left:0px;"></div>
为什么display
属性默认不是白名单?
答案 0 :(得分:1)
因为其他白名单样式因为元素根本不显示而无法正常工作
<强>更新强>
在大多数情况下,
display
有很多奇怪的边缘情况会影响布局 方式。
inline
,block
和inline-block
可能都是安全的。
fixed
可能没有安全感。
table
和其他人可能很狡猾,因为可能有办法打破 视觉遏制。即使
block
和inline block
也可以打破视觉遏制 使用仅在嵌入器修复时允许内联标记的策略 容器的width
并且不会隐藏overflow
。