最近在做一个项目,里面有个需求是分析网页文件,并且检索到需要的内容,并且显示到客户端上。
问题就出现了,如果一个网页文件中包含了<script>alert()</script>。这样的脚本文件,则会出问题了。
于是我想了很多办法,但是都不是很好用。
我参考了dudu的替换脚本的方法
public static string FilterScript(string content)
![](/Images/OutliningIndicators/None.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
string regexstr=@"<script.*</script>";
![](/Images/OutliningIndicators/InBlock.gif)
return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);
![](/Images/OutliningIndicators/InBlock.gif)
}
public static string FilterScript(string content)
![](/Images/OutliningIndicators/None.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
string regexstr=@"(?i)<script([^>])*>(\w|\W)*</script([^>])*>";
![](/Images/OutliningIndicators/InBlock.gif)
return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);
![](/Images/OutliningIndicators/InBlock.gif)
}
这样表面看问题好像解决了,但是依旧有问题。他会把只要是在<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);
![](/Images/OutliningIndicators/InBlock.gif)
}
这样,就会循环的进行替换,只把<script></script>之间的内容替换,而不会从头替换到脚
希望对其他能搜索到这篇内容的朋友有所帮助
问题就出现了,如果一个网页文件中包含了<script>alert()</script>。这样的脚本文件,则会出问题了。
于是我想了很多办法,但是都不是很好用。
我参考了dudu的替换脚本的方法
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
但是这样有问题,也就是只能替换<script></script>在一行的情况
于是修改了以上的代码成为
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
这样表面看问题好像解决了,但是依旧有问题。他会把只要是在<script></script>中的任何内容都替换为空,也就是说,如果出现了,<script></script>内容<script></script>的情况,会被替换为空。
于是最终修改为
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
这样,就会循环的进行替换,只把<script></script>之间的内容替换,而不会从头替换到脚
希望对其他能搜索到这篇内容的朋友有所帮助