我最近插入PageDown来清理来自textarea的一些HTML输入,我注意到它修剪了“样式”元素。
我只是想知道为什么这些被认为是不安全的?
答案 0 :(得分:4)
IE有一个特殊的CSS功能allows JavaScript to be embedded within CSS。仅这一点就足以让他们禁止<style>
标签。
behavior:
个表达式也可以输入style
属性,因此您应确保从{{3}中删除style
个属性},或将特定样式列入白名单。你应该不尝试黑名单样式,因为脚本可以通过几种方式进入样式,并且有whitelist。
另外,正如其他人提到的,您可以使用CSS完全更改页面的外观。如果不允许其他标记(例如<form>
标记),我无法想到任何可能有害的方法,但如果给予足够的创造力,我确定恶意的人可以提出一些想法。
答案 1 :(得分:0)
我的考虑很简单,你应该阻止用户提交<script>
和其他可能操纵你代码的标签,也许他们的正则表达式也可以删除<style>
标签。但不要认为这是理所当然的。
信用额度为:http://www.squarefree.com/securitytips/web-developers.html
您应该确保的事情绝不允许在用户提交的HTML中使用 保护使用Firefox和IE的访问者的帐户:
javascript:, vbscript:, and data: URLs in links, images, anywhere. <script> tags, with or without src attributes. Event attributes (on*), which contain scripts. -moz-binding: or behavior: CSS properties inside <style> elements or style attributes. HTML is that is not "well-formed" -- you can't be sure how quirky browsers will parse it. (Example: <b <i>Foo)
答案 2 :(得分:0)
样式表相当强大。它们可以有效地替换页面的整个内容(使用图像,即使浏览器没有完全支持content insertion。)。不仅如此,一些较新的浏览器在与3d变换相关的漏洞方面的记录也不佳。 (据我所知,你不能触发那些恶意制作的CSS,但如果出现这种情况,我也不会感到惊讶。)
(In HTML4 style
belongs unequivocally in the head
。In HTML5, it can be scoped仅影响元素的子树,这可能会减少基于CSS的攻击的影响区域,但不会影响它可以在该区域内造成的伤害。)
答案 3 :(得分:0)
如果您要删除任何HTML标记,通常情况下,如果您将标记和属性列入白名单(即,列出您允许的内容,并删除其他所有内容),而不是将其列入黑名单。 HTML可能有点复杂,并且仍在不断发展;您怎么知道将来不会有<stuff>
元素支持浏览器运行任意内容?
据说...与大多数元素不同,样式表可以改变它嵌入的整个页面的外观。如果不依靠iframe等,或者解析CSS并剥离,它就不能可靠地受到限制。违规的财产和/或增加特异性。 (例如,IE8不能依赖HTML5规则 - IE8仍然是最常用的浏览器之一。事实上,范围内的样式元素似乎还没有得到很好的支持。)特别是,理论上可以编写一些CSS来占用整个页面并将其完全转换为另一个页面。它甚至可以导致本机代码运行(例如,通过IE中的behavior
)。因此,对于将以HTML格式输出的内容,它根本不是我通常允许的内容。对于管理员后端,可能......但不是,例如,评论表。