C# 从HTML输入中剥离脚本标记 公共静态字符串MakeWebSafe(此字符串x){ 常量字符串RegexRemove=@“(]*>)|(]*>)”; 返回Regex.Replace(x,RegexRemove,string.Empty,RegexOptions.IgnoreCase); }

C# 从HTML输入中剥离脚本标记 公共静态字符串MakeWebSafe(此字符串x){ 常量字符串RegexRemove=@“(]*>)|(]*>)”; 返回Regex.Replace(x,RegexRemove,string.Empty,RegexOptions.IgnoreCase); },c#,html,regex,C#,Html,Regex,是否有任何原因说明此实现不够好。你能打破它吗?有什么我没有考虑的吗?如果你使用或曾经使用过不同的东西,它的优点是什么 我知道这会在文本中留下脚本的主体,但这对这个项目来说没关系 更新 不要这样做!最后我还是这样说的:。是的,您的正则表达式可以通过unicode编码脚本标记来规避。在安全性方面,我建议您使用更健壮的库。看看你考虑过这种情况吗 public static string MakeWebSafe(this string x) { const string RegexRemove

是否有任何原因说明此实现不够好。你能打破它吗?有什么我没有考虑的吗?如果你使用或曾经使用过不同的东西,它的优点是什么

我知道这会在文本中留下脚本的主体,但这对这个项目来说没关系

更新
不要这样做!最后我还是这样说的:。

是的,您的正则表达式可以通过unicode编码脚本标记来规避。在安全性方面,我建议您使用更健壮的库。看看

你考虑过这种情况吗

public static string MakeWebSafe(this string x) {
    const string RegexRemove = @"(<\s*script[^>]*>)|(<\s*/\s*script[^>]*>)";
    return Regex.Replace(x, RegexRemove, string.Empty, RegexOptions.IgnoreCase);
}

因果关系();

最好的办法是删除所有标记、编码或使用bbcode

而不是尝试编写一个简单的脚本并留下失败的可能性,为什么不使用HTML Agility Pack之类的HTML解析器呢?不要重新发明轮子。使用经验证、可靠的安全库。看看克里斯的答案。如果/当我有时间,我会回来改进它,我只是需要一个快速而肮脏的解决方案。快速而肮脏?下载库、向项目添加引用以及编写一行或两行从字符串中删除
元素所需的时间不到5分钟。我只想阻止任何脚本实际运行。不管它的内容或其他剩余内容是否对我正在进行的项目有效。这就是重点,你去掉你想要的部分,脚本就会运行,因为你只删除了内部脚本标记,而不是无效的,如果你删除了内部标记,这些标记就会变为有效的。这一点很好。因为这是一个内部工具,所以我只需要实现最基本的解决方案,然后启动并运行一些东西。这超出了任何使用该工具的人的能力(这不是我所知道的最好的借口,但我希望我有时间回来改进它)。在退出时对字符串进行HtmlEncode会更安全,这样就不会执行任何标记。看看WPL,它确实很容易集成,并且有一些很好的工具来获得安全的标记,这将允许一些标记被认为是安全的。
<scri<script>pt type="text/javascript">
    causehavoc();
</scr</script>ipt>