且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

危险字符过滤的类

更新时间:2022-09-19 18:03:00


危险字符过滤的类using System;
危险字符过滤的类
using System.IO;
危险字符过滤的类
using System.Text;
危险字符过滤的类
using System.Text.RegularExpressions;
危险字符过滤的类
using System.Runtime.Remoting;
危险字符过滤的类
using System.Runtime.Remoting.Proxies;
危险字符过滤的类
using System.Runtime.Remoting.Messaging;
危险字符过滤的类
using System.Reflection;
危险字符过滤的类
危险字符过滤的类
namespace FilterRealProxy
危险字符过滤的类
{
危险字符过滤的类 
/// <summary>
危险字符过滤的类 
///  FilterRealProxy类:一个真实代理, 拦截它所代理对象中方法的返回值,并对需要过滤的返回值进行过滤。
危险字符过滤的类 
/// </summary>

危险字符过滤的类 public class FilterRealProxy:RealProxy
危险字符过滤的类 
{
危险字符过滤的类  
private MarshalByRefObject target;
危险字符过滤的类  
public FilterRealProxy(MarshalByRefObject target):base(target.GetType())
危险字符过滤的类  
{
危险字符过滤的类   
this.target=target;    
危险字符过滤的类  }

危险字符过滤的类  
public override IMessage Invoke(IMessage msg)
危险字符过滤的类  
{
危险字符过滤的类   IMethodCallMessage callMsg
=msg as IMethodCallMessage;
危险字符过滤的类   IMethodReturnMessage returnMsg 
= RemotingServices.ExecuteMessage(target,callMsg);
危险字符过滤的类   
//检查返回值是否为String,如果不是String,就没必要进行过滤
危险字符过滤的类
   if(this.IsMatchType(returnMsg.ReturnValue))
危险字符过滤的类   
{
危险字符过滤的类    
string returnValue=this.Filter(returnMsg.ReturnValue.ToString(),returnMsg.MethodName);            
危险字符过滤的类    
return new ReturnMessage(returnValue,null,0,null,callMsg);
危险字符过滤的类   }

危险字符过滤的类   
return returnMsg;
危险字符过滤的类     }

危险字符过滤的类  
protected string Filter(string ReturnValue,string MethodName)
危险字符过滤的类  
{
危险字符过滤的类   MethodInfo methodInfo
=target.GetType().GetMethod(MethodName);
危险字符过滤的类   
object[] attributes=methodInfo.GetCustomAttributes(typeof(StringFilter),true);
危险字符过滤的类   
foreach (object attrib in attributes)
危险字符过滤的类   
{
危险字符过滤的类    
return FilterHandler.Process(((StringFilter)attrib).FilterType,ReturnValue);
危险字符过滤的类   }

危险字符过滤的类   
return ReturnValue;
危险字符过滤的类  }

危险字符过滤的类  
protected bool IsMatchType(object obj)
危险字符过滤的类  
{
危险字符过滤的类   
return obj is System.String;
危险字符过滤的类  }

危险字符过滤的类 }

危险字符过滤的类
危险字符过滤的类 
///<summary>
危险字符过滤的类 
///  StringFilter类:自定义属性类, 定义目标元素的过滤类型 
危险字符过滤的类 
///</summary>

危险字符过滤的类 public class StringFilter:Attribute
危险字符过滤的类 
{
危险字符过滤的类  
protected FilterType _filterType;
危险字符过滤的类
危险字符过滤的类  
public StringFilter(FilterType filterType)
危险字符过滤的类  
{
危险字符过滤的类   
this._filterType=filterType;
危险字符过滤的类  }

危险字符过滤的类  
public FilterType FilterType
危险字符过滤的类  
{
危险字符过滤的类   
get
危险字符过滤的类   
{
危险字符过滤的类    
return _filterType;
危险字符过滤的类   }

危险字符过滤的类  }

危险字符过滤的类 }

危险字符过滤的类
危险字符过滤的类 
/// <summary>
危险字符过滤的类 
/// 枚举类:用于指定过滤类型,例如:对script过滤还是对html进行过滤?
危险字符过滤的类 
/// </summary>

危险字符过滤的类 [Flags()]
危险字符过滤的类 
public enum FilterType
危险字符过滤的类 
{
危险字符过滤的类  Script 
= 1,
危险字符过滤的类  Html 
=2,
危险字符过滤的类  Object
=3,
危险字符过滤的类  AHrefScript
=4,
危险字符过滤的类  Iframe
=5,
危险字符过滤的类  Frameset
=6,
危险字符过滤的类  Src
=7,
危险字符过滤的类  BadWords
=8,
危险字符过滤的类  
//Include=9,
危险字符过滤的类
  All=16
危险字符过滤的类 }

危险字符过滤的类
危险字符过滤的类 
///<summary>
危险字符过滤的类 
/// 过滤处理类:根据过滤类型,调用相应的过滤处理方法。
危险字符过滤的类 
///</summary>

危险字符过滤的类 
危险字符过滤的类 
public class FilterHandler
危险字符过滤的类 
{
危险字符过滤的类  
private FilterHandler()
危险字符过滤的类  
{
危险字符过滤的类  }

危险字符过滤的类  
public static string Process(FilterType filterType,string filterContent)
危险字符过滤的类  
{
危险字符过滤的类   
switch(filterType)
危险字符过滤的类   
{
危险字符过滤的类    
case FilterType.Script:
危险字符过滤的类     filterContent
=FilterScript(filterContent);
危险字符过滤的类     
break;
危险字符过滤的类    
case FilterType.Html:
危险字符过滤的类     filterContent
=FilterHtml(filterContent);
危险字符过滤的类     
break;
危险字符过滤的类    
case FilterType.Object:
危险字符过滤的类     filterContent
=FilterObject(filterContent);
危险字符过滤的类     
break;
危险字符过滤的类    
case FilterType.AHrefScript:
危险字符过滤的类     filterContent
=FilterAHrefScript(filterContent);
危险字符过滤的类     
break;
危险字符过滤的类    
case FilterType.Iframe:
危险字符过滤的类     filterContent
=FilterIframe(filterContent);
危险字符过滤的类     
break;
危险字符过滤的类    
case FilterType.Frameset:
危险字符过滤的类     filterContent
=FilterFrameset(filterContent);
危险字符过滤的类     
break;
危险字符过滤的类    
case FilterType.Src:
危险字符过滤的类     filterContent
=FilterSrc(filterContent);
危险字符过滤的类     
break;
危险字符过滤的类    
//case FilterType.Include:
危险字符过滤的类    
// filterContent=FilterInclude(filterContent);
危险字符过滤的类    
// break;
危险字符过滤的类
    case FilterType.BadWords:
危险字符过滤的类     filterContent
=FilterBadWords(filterContent);
危险字符过滤的类     
break;
危险字符过滤的类    
case FilterType.All:
危险字符过滤的类     filterContent
=FilterAll(filterContent);
危险字符过滤的类     
break;
危险字符过滤的类    
default:
危险字符过滤的类     
//do nothing
危险字符过滤的类
     break;
危险字符过滤的类   }

危险字符过滤的类   
return filterContent;
危险字符过滤的类  }

危险字符过滤的类
危险字符过滤的类  
public static string FilterScript(string content)
危险字符过滤的类  
{
危险字符过滤的类   
string commentPattern = @"(?'comment'<!--.*?--[ \n\r]*>)" ;
危险字符过滤的类   
string embeddedScriptComments = @"(\/\*.*?\*\/|\/\/.*?[\n\r])" ;
危险字符过滤的类   
string scriptPattern = String.Format(@"(?'script'<[ \n\r]*script[^>]*>(.*?{0}?)*<[ \n\r]*/script[^>]*>)", embeddedScriptComments ) ;
危险字符过滤的类   
// 包含注释和Script语句
危险字符过滤的类
   string pattern = String.Format(@"(?s)({0}|{1})", commentPattern, scriptPattern) ;
危险字符过滤的类
危险字符过滤的类   
return StripScriptAttributesFromTags(Regex.Replace(content,pattern,string.Empty,RegexOptions.IgnoreCase));
危险字符过滤的类  }

危险字符过滤的类
危险字符过滤的类  
private static string StripScriptAttributesFromTags( string content )
危险字符过滤的类  
{
危险字符过滤的类   
string eventAttribs = @"on(blur|c(hange|lick)|dblclick|focus|keypress|(key|mouse)(down|up)|(un)?load
危险字符过滤的类                    |mouse(move|o(ut|ver))|reset|s(elect|ubmit))
" ;
危险字符过滤的类    
危险字符过滤的类   
string pattern = String.Format(@"(?inx)
危险字符过滤的类        \<(\w+)\s+
危险字符过滤的类            (
危险字符过滤的类                (?'attribute'
危险字符过滤的类                (?'attributeName'{0})\s*=\s*
危险字符过滤的类                (?'delim'['""]?)
危险字符过滤的类                (?'attributeValue'[^'"">]+)
危险字符过滤的类                (\3)
危险字符过滤的类            )
危险字符过滤的类            |
危险字符过滤的类            (?'attribute'
危险字符过滤的类                (?'attributeName'href)\s*=\s*
危险字符过滤的类                (?'delim'['""]?)
危险字符过滤的类                (?'attributeValue'javascript[^'"">]+)
危险字符过滤的类                (\3)
危险字符过滤的类            )
危险字符过滤的类            |
危险字符过滤的类            [^>]
危险字符过滤的类        )*
危险字符过滤的类    \>
", eventAttribs ) ;
危险字符过滤的类   Regex re 
= new Regex( pattern ) ;
危险字符过滤的类   
// 使用MatchEvaluator的委托
危险字符过滤的类
   return re.Replace( content, new MatchEvaluator( StripAttributesHandler ) ) ;
危险字符过滤的类  }

危险字符过滤的类
危险字符过滤的类  
private static string StripAttributesHandler( Match m )
危险字符过滤的类  
{
危险字符过滤的类   
if( m.Groups["attribute"].Success  )
危险字符过滤的类   
{
危险字符过滤的类    
return m.Value.Replace( m.Groups["attribute"].Value, "") ;
危险字符过滤的类   }

危险字符过滤的类   
else
危险字符过滤的类   
{
危险字符过滤的类    
return m.Value ;
危险字符过滤的类   }

危险字符过滤的类  }

危险字符过滤的类
危险字符过滤的类  
public static string FilterAHrefScript(string content)
危险字符过滤的类  
{
危险字符过滤的类   
string newstr=FilterScript(content);
危险字符过滤的类   
string regexstr=@" href[ ^=]*= *[\s\S]*script *:";
危险字符过滤的类   
return Regex.Replace(newstr,regexstr,string.Empty,RegexOptions.IgnoreCase);
危险字符过滤的类  }

危险字符过滤的类
危险字符过滤的类  
public static string FilterSrc(string content)
危险字符过滤的类  
{
危险字符过滤的类   
string newstr=FilterScript(content);
危险字符过滤的类   
string regexstr=@" src *= *['""]?[^\.]+\.(js|vbs|asp|aspx|php|jsp)['""]";
危险字符过滤的类   
return Regex.Replace(newstr,regexstr,@"",RegexOptions.IgnoreCase);
危险字符过滤的类  }

危险字符过滤的类
/*
危险字符过滤的类  public static string FilterInclude(string content)
危险字符过滤的类  {
危险字符过滤的类   string newstr=FilterScript(content);
危险字符过滤的类   string regexstr=@"<[\s\S]*include *(file|virtual) *= *[\s\S]*\.(js|vbs|asp|aspx|php|jsp)[^>]*>";
危险字符过滤的类   return Regex.Replace(newstr,regexstr,string.Empty,RegexOptions.IgnoreCase);
危险字符过滤的类  }
危险字符过滤的类
*/

危险字符过滤的类  
public static string FilterHtml(string content)
危险字符过滤的类  
{
危险字符过滤的类   
string newstr=FilterScript(content);
危险字符过滤的类   
string regexstr=@"<[^>]*>";
危险字符过滤的类   
return Regex.Replace(newstr,regexstr,string.Empty,RegexOptions.IgnoreCase);
危险字符过滤的类  }

危险字符过滤的类
危险字符过滤的类  
public static string FilterObject(string content)
危险字符过滤的类  
{
危险字符过滤的类   
string regexstr=@"(?i)<Object([^>])*>(\w|\W)*</Object([^>])*>";
危险字符过滤的类   
return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);
危险字符过滤的类  }

危险字符过滤的类
危险字符过滤的类  
public static string FilterIframe(string content)
危险字符过滤的类  
{
危险字符过滤的类   
string regexstr=@"(?i)<Iframe([^>])*>(\w|\W)*</Iframe([^>])*>";
危险字符过滤的类   
return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);
危险字符过滤的类  }

危险字符过滤的类
危险字符过滤的类  
public static string FilterFrameset(string content)
危险字符过滤的类  
{
危险字符过滤的类   
string regexstr=@"(?i)<Frameset([^>])*>(\w|\W)*</Frameset([^>])*>";
危险字符过滤的类   
return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);
危险字符过滤的类  }

危险字符过滤的类
危险字符过滤的类  
//移除非法或不友好字符
危险字符过滤的类
  private static string FilterBadWords(string chkStr)
危险字符过滤的类  
{
危险字符过滤的类    
//这里的非法和不友好字符由你任意加,用“|”分隔,支持正则表达式,由于本Blog禁止贴非法和不友好字符,所以这里无法加上。
危险字符过滤的类
string BadWords=@"危险字符过滤的类";
危险字符过滤的类   
if (chkStr == "")
危险字符过滤的类   
{
危险字符过滤的类    
return "";
危险字符过滤的类   }

危险字符过滤的类
危险字符过滤的类   
string[] bwords = BadWords.Split('#');
危险字符过滤的类   
int i,j;
危险字符过滤的类   
string str;
危险字符过滤的类   StringBuilder sb 
= new StringBuilder();
危险字符过滤的类   
for(i = 0; i< bwords.Length; i++)
危险字符过滤的类   
{
危险字符过滤的类    str
=bwords[i].ToString().Trim();
危险字符过滤的类    
string regStr,toStr;
危险字符过滤的类    regStr
=str;
危险字符过滤的类    Regex r
=new Regex(regStr,RegexOptions.IgnoreCase | RegexOptions.Singleline| RegexOptions.Multiline);
危险字符过滤的类    Match m
=r.Match(chkStr);
危险字符过滤的类    
if(m.Success)
危险字符过滤的类    
{
危险字符过滤的类     j
=m.Value.Length;
危险字符过滤的类     sb.Insert(
0,"*",j);
危险字符过滤的类     toStr
=sb.ToString();
危险字符过滤的类     chkStr
=Regex.Replace(chkStr,regStr,toStr,RegexOptions.IgnoreCase | RegexOptions.Singleline| RegexOptions.Multiline);  
危险字符过滤的类    }

危险字符过滤的类    sb.Remove(
0,sb.Length);
危险字符过滤的类   }

危险字符过滤的类   
return chkStr;
危险字符过滤的类  }

危险字符过滤的类
危险字符过滤的类  
public static string FilterAll(string content)
危险字符过滤的类  
{
危险字符过滤的类   content 
= FilterHtml(content);
危险字符过滤的类   content 
= FilterScript(content);
危险字符过滤的类   content 
= FilterAHrefScript(content);
危险字符过滤的类   content 
= FilterObject(content);
危险字符过滤的类   content 
= FilterIframe(content);
危险字符过滤的类   content 
= FilterFrameset(content);
危险字符过滤的类   content 
= FilterSrc(content);
危险字符过滤的类   content 
= FilterBadWords(content);
危险字符过滤的类   
//content = FilterInclude(content);
危险字符过滤的类
   return content;
危险字符过滤的类  }

危险字符过滤的类 }

危险字符过滤的类}

危险字符过滤的类




本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2006/03/21/354970.html,如需转载请自行联系原作者