lxml.htm.clean移除标签中的'style'的目的是什么
我正在使用 lxml.html.clean 来清理 HTML 内容。它似乎会把所有标签中的 'style' 属性都去掉,而我需要这些 'style' 属性不被删除。
在我开始允许这些属性之前,我想了解一下,不去掉 'style' 属性在清理 HTML 时是否会有安全隐患。
如果有高手能分享一下这方面的见解,我将非常感激。
(请注意,我的应用程序允许最终用户创建 HTML,这些内容会保存在后端数据库中,然后在页面上显示。上面提到的 'clean' 方法在去除任何恶意 HTML(例如 JavaScript 等)方面效果很好,这些内容在保存之前会被清理。)
根据 feedparser HTML 清理网站 的说法,'style' 并不在 '安全属性' 的列表中。
(另外,如果这个问题比较基础,我很抱歉。我对 HTML、清理和相关的安全问题还很陌生。)
1 个回答
2
在正常情况下,样式本身并不是安全隐患。但是,有几种情况可能会让恶意样式变得危险:
- 在某些浏览器中,带有
style="display:none"
的form
和input
元素可能会自动填充数据,这样用户可能会在不知情的情况下提交额外的数据。 - 如果使用
style="display:block"
或其他display
样式,可能会破坏原本期待使用inline
或其他样式的布局。 - 如果你的布局引擎想要保持特定的视觉风格,允许在
style
属性中设置样式信息,会让作者或发布者有更多的自由去选择样式。(如果他们决定使用2000pt的字体呢?) - 样式属性有时可以通过
@import
机制加载其他样式,或者通过background
和类似属性加载网址。除非清理工具也能清理CSS代码,否则这可能成为注入攻击的一个途径。
因为你想要清理的唯一原因是来源可能不可信或不安全,所以假设让来源自己设置样式并不是你想要的。