【问题标题】:Will this remove all possible script tags?这会删除所有可能的脚本标签吗?
【发布时间】:2009-09-18 04:13:16
【问题描述】:

我正在尝试制作一个只会查找和删除脚本标签的正则表达式(它是我想要删除的唯一标签,因为我认为它是唯一会造成损坏的标签)。

无论如何,我知道有很多方法可以编写仍然有效的脚本标签。这会抓住他们吗?

<\s*script\s*>.*?<\s*\/script\s*>

编辑

或者尝试将它们全部更改为安全标签会更好吗?你知道它在哪里对标签进行 html 编码吗?但它只能在脚本标签上,因为我仍然希望允许其他 html 标签,如 &lt;b&gt; 和其他东西。

【问题讨论】:

  • 请参阅我的回答。

标签: c# javascript regex


【解决方案1】:

在您想要过滤这类事情的几乎所有情况下,最好检查您特别想要允许的内容,而不是您想要禁止的内容>。在 HTML 源代码中隐藏 &lt;script&gt; 标记有无数种创造性的方法,您不想尝试赶上人们可能发明的新标记。另一方面,您可以很容易地创建一个可接受的标签列表并让人们使用这些标签。

【讨论】:

  • 如何制作这个可接受的标签列表?我来自富 html 编辑器的所有内容大部分时间都作为样式传递(对于字体粗细、左边距),但它也使用像 这样的标签
【解决方案2】:

这不是唯一可能造成损坏的标签。考虑以下几点:

<a href="javascript:window.close()">

另外,不,它不会。再次考虑以下几点:

<script language="javascript">window.close()</script>

即使你扩展它来处理脚本标签上的属性,那又如何:

<script src="http://somesite.com/malicious.js" />

老实说,在我个人的估计中,最好的方法是要么有一个非常明确的允许标签/属性的白名单,要么引入你自己的标记并完全禁止裸 html。

编辑:

为您提供更多信息:

白名单只是一个简单的列表,其中列出了允许的内容,禁止其他所有内容,这与您最初的黑名单想法相反,其中脚本标签被禁止,但其他所有内容都被允许。

【讨论】:

  • 每个人都说使用“白名单”,但实际上没有人告诉我如何使用。他们只是说不要使用正则表达式,但没有告诉我如何在 C# 中实际制作
【解决方案3】:

该正则表达式将允许&lt;script foo=bar&gt;&lt;script&gt; 之类的内容通过(以及可能造成破坏的无数类似内容,但也有一些人们经常忘记的类似内容:

 <foo onload="document.write('<scri'+'pt>...<'+'/script>')"></foo>

这也让生活变得困难:-(

【讨论】:

    【解决方案4】:

    您可以使用这些 Samples 来演示如何使用 MSHTML 有 UI-Less 解析器,在那里您可以删除脚本标签以及您可以实现可以在您的应用程序中完全禁用 javascript 的自定义服务主机,这里是一个 @ 987654322@which 确实帮助了我一次。

    有两种方法,1你可以设置不执行javascript的设计模式,另一种是你可以禁用选项URLACTION_SCRIPT_JAVA_USE;

    【讨论】:

      【解决方案5】:
      <b style="left:expression(alert('IE just got pwned'));">Oops...</b>
      

      这里对这些问题进行了很好的讨论:Sanitising HTML is an extremely hard problem.

      【讨论】:

        猜你喜欢
        • 2021-08-13
        • 2011-08-01
        • 1970-01-01
        • 2013-12-03
        • 2015-10-08
        • 2017-02-09
        • 2019-03-04
        • 2010-11-27
        • 1970-01-01
        相关资源
        最近更新 更多