voodooq

如果人类少一些私欲,世界将多一些安详……

博客园 首页 新随笔 联系 订阅 管理
最近在做一个项目,里面有个需求是分析网页文件,并且检索到需要的内容,并且显示到客户端上。

问题就出现了,如果一个网页文件中包含了<script>alert()</script>。这样的脚本文件,则会出问题了。

于是我想了很多办法,但是都不是很好用。

我参考了dudu的替换脚本的方法
public static string FilterScript(string content)

 
{

              
string regexstr=@"<script.*</script>";

              
return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);

 }

但是这样有问题,也就是只能替换<script></script>在一行的情况

于是修改了以上的代码成为

public static string FilterScript(string content)

         
{

              
string regexstr=@"(?i)<script([^>])*>(\w|\W)*</script([^>])*>";

              
return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);

          }


这样表面看问题好像解决了,但是依旧有问题。他会把只要是在<script></script>中的任何内容都替换为空,也就是说,如果出现了,<script></script>内容<script></script>的情况,会被替换为空。

于是最终修改为
        private string FilterScript(string content)
        
{
            
string regexstr=@"<script[^>]*>([\s\S](?!<script))*?</script>";
            
return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);

        }

这样,就会循环的进行替换,只把<script></script>之间的内容替换,而不会从头替换到脚

希望对其他能搜索到这篇内容的朋友有所帮助
posted on 2006-06-16 15:45  Voodoo's天空  阅读(1764)  评论(0编辑  收藏  举报