我正在尝试创建一个只需查找和删除脚本标记的正则表达式(它是我想删除的唯一标记,因为我认为它是唯一可能导致损坏的标记)。
无论如何我知道有很多方法可以编写一个仍然有效的脚本标签。这会抓住他们吗?
<\s*script\s*>.*?<\s*\/script\s*>
修改
或者尝试将它们全部更改为安全标签会更好吗?你知道它在标签上的html编码在哪里吗?但它只能在脚本标签上,因为我仍然想要允许其他html标签,如<b>
和东西。
答案 0 :(得分:7)
在几乎所有想要过滤此类事物的情况下,最好检查一下你特别想要允许的内容,而不是你想要禁止的内容。在HTML源代码中隐藏<script>
标记有很多创造性的方法,你不想尝试追赶人们可能发明的新标记。另一方面,您可以非常轻松地创建可接受标记的列表,并让人们使用它们。
答案 1 :(得分:3)
它不是唯一可能造成损害的标签。请考虑以下事项:
<a href="javascript:window.close()">
另外,不,它不会。再次考虑以下事项:
<script language="javascript">window.close()</script>
即使你展开它来处理脚本标签上的属性,那么:
<script src="http://somesite.com/malicious.js" />
老实说,根据我个人的估计,最好的方法是要么拥有一个非常明确的标签/属性白名单,要么引入你自己的标记并完全禁止裸HTML。
修改强>
为您提供更多信息:
白名单只是一个允许的内容列表,其他所有内容都是不允许的,而不是您最初的黑名单概念,其中不允许使用脚本标记,但其他所有内容都是允许的。
答案 2 :(得分:1)
正则表达式将允许像<script foo=bar><script>
这样的东西通过(以及可能造成严重破坏的无数类似事物,但也有人们经常忘记这样的事情:
<foo onload="document.write('<scri'+'pt>...<'+'/script>')"></foo>
这也让生活变得困难: - (
答案 3 :(得分:0)
您可以使用这些Samples演示如何使用MSHTML具有UI-Less解析器,您可以删除脚本标记,以及您可以实现可以在您的应用程序中完全禁用javascript的自定义服务主机,这里是discussion曾帮我一次。
有两种方法,1你可以设置设计模式,不执行javascript,其他方法是你可以禁用选项URLACTION_SCRIPT_JAVA_USE;
答案 4 :(得分:0)
<b style="left:expression(alert('IE just got pwned'));">Oops...</b>
以下是对问题的良好讨论:Sanitising HTML is an extremely hard problem.