由于我的固执,常被朋友叫成"木头鸟",也许有一天"木鸟"也会飞翔... 注册 | 登陆
浏览模式: 标准 | 列表全部文章

[转]危险字符过滤的类

C#代码
  1. using System;       
  2. using System.IO;       
  3. using System.Text;       
  4. using System.Text.RegularExpressions;       
  5. using System.Runtime.Remoting;       
  6. using System.Runtime.Remoting.Proxies;       
  7. using System.Runtime.Remoting.Messaging;       
  8. using System.Reflection;       
  9.       
  10. namespace FilterRealProxy       
  11. {       
  12.     /**//// <summary>       
  13.     ///  FilterRealProxy类:一个真实代理, 拦截它所代理对象中方法的返回值,并对需要过滤的返回值进行过滤。       
  14.     /// </summary>       
  15.     public class FilterRealProxy:RealProxy       
  16.     {       
  17.         private MarshalByRefObject target;       
  18.         public FilterRealProxy(MarshalByRefObject target):base(target.GetType())       
  19.         {       
  20.             this.target=target;           
  21.         }       
  22.         public override IMessage Invoke(IMessage msg)       
  23.         {       
  24.             IMethodCallMessage callMsg=msg as IMethodCallMessage;       
  25.             IMethodReturnMessage returnMsg = RemotingServices.ExecuteMessage(target,callMsg);       
  26.             //检查返回值是否为String,如果不是String,就没必要进行过滤       
  27.             if(this.IsMatchType(returnMsg.ReturnValue))       
  28.             {       
  29.                 string returnValue=this.Filter(returnMsg.ReturnValue.ToString(),returnMsg.MethodName);                   
  30.                 return new ReturnMessage(returnValue,null,0,null,callMsg);       
  31.             }       
  32.             return returnMsg;       
  33.      }       
  34.         protected string Filter(string ReturnValue,string MethodName)       
  35.         {       
  36.             MethodInfo methodInfo=target.GetType().GetMethod(MethodName);       
  37.             object[] attributes=methodInfo.GetCustomAttributes(typeof(StringFilter),true);       
  38.             foreach (object attrib in attributes)       
  39.             {       
  40.                 return FilterHandler.Process(((StringFilter)attrib).FilterType,ReturnValue);       
  41.             }       
  42.             return ReturnValue;       
  43.         }       
  44.         protected bool IsMatchType(object obj)       
  45.         {       
  46.             return obj is System.String;       
  47.         }       
  48.     }       
  49.       
  50.     /**////<summary>       
  51.     ///  StringFilter类:自定义属性类, 定义目标元素的过滤类型        
  52.     ///</summary>       
  53.     public class StringFilter:Attribute       
  54.     {       
  55.         protected FilterType _filterType;       
  56.       
  57.         public StringFilter(FilterType filterType)       
  58.         {       
  59.             this._filterType=filterType;       
  60.         }       
  61.         public FilterType FilterType       
  62.         {       
  63.             get      
  64.             {       
  65.                 return _filterType;       
  66.             }       
  67.         }       
  68.     }       
  69.       
  70.     /**//// <summary>       
  71.     /// 枚举类:用于指定过滤类型,例如:对script过滤还是对html进行过滤?       
  72.     /// </summary>       
  73.     [Flags()]       
  74.     public enum FilterType       
  75.     {       
  76.         Script = 1,       
  77.         Html =2,       
  78.         Object=3,       
  79.         AHrefScript=4,       
  80.         Iframe=5,       
  81.         Frameset=6,       
  82.         Src=7,       
  83.         BadWords=8,       
  84.         //Include=9,       
  85.         All=16       
  86.     }       
  87.       
  88.     /**////<summary>       
  89.     /// 过滤处理类:根据过滤类型,调用相应的过滤处理方法。       
  90.     ///</summary>       
  91.         
  92.     public class FilterHandler       
  93.     {       
  94.         private FilterHandler()       
  95.         {       
  96.         }       
  97.         public static string Process(FilterType filterType,string filterContent)       
  98.         {       
  99.             switch(filterType)       
  100.             {       
  101.                 case FilterType.Script:       
  102.                     filterContent=FilterScript(filterContent);       
  103.                     break;       
  104.                 case FilterType.Html:       
  105.                     filterContent=FilterHtml(filterContent);       
  106.                     break;       
  107.                 case FilterType.Object:       
  108.                     filterContent=FilterObject(filterContent);       
  109.                     break;       
  110.                 case FilterType.AHrefScript:       
  111.                     filterContent=FilterAHrefScript(filterContent);       
  112.                     break;       
  113.                 case FilterType.Iframe:       
  114.                     filterContent=FilterIframe(filterContent);       
  115.                     break;       
  116.                 case FilterType.Frameset:       
  117.                     filterContent=FilterFrameset(filterContent);       
  118.                     break;       
  119.                 case FilterType.Src:       
  120.                     filterContent=FilterSrc(filterContent);       
  121.                     break;       
  122.                     //case FilterType.Include:       
  123.                     // filterContent=FilterInclude(filterContent);       
  124.                     // break;       
  125.                 case FilterType.BadWords:       
  126.                     filterContent=FilterBadWords(filterContent);       
  127.                     break;       
  128.                 case FilterType.All:       
  129.                     filterContent=FilterAll(filterContent);       
  130.                     break;       
  131.                 default:       
  132.                     //do nothing       
  133.                     break;       
  134.             }       
  135.             return filterContent;       
  136.         }       
  137.       
  138.         public static string FilterScript(string content)       
  139.         {       
  140.             string commentPattern = @"(?'comment'<!--.*?--[ \n\r]*>)" ;       
  141.             string embeddedScriptComments = @"(\/\*.*?\*\/|\/\/.*?[\n\r])" ;       
  142.             string scriptPattern = String.Format(@"(?'script'<[ \n\r]*script[^>]*>(.*?{0}?)*<[ \n\r]*/script[^>]*>)", embeddedScriptComments ) ;       
  143.             // 包含注释和Script语句       
  144.             string pattern = String.Format(@"(?s)({0}|{1})", commentPattern, scriptPattern) ;       
  145.       
  146.             return StripScriptAttributesFromTags(Regex.Replace(content,pattern,string.Empty,RegexOptions.IgnoreCase));       
  147.         }       
  148.       
  149.         private static string StripScriptAttributesFromTags( string content )       
  150.         {       
  151.             string eventAttribs = @"on(blur|c(hange|lick)|dblclick|focus|keypress|(key|mouse)(down|up)|(un)?load     
  152.                     |mouse(move|o(ut|ver))|reset|s(elect|ubmit))" ;       
  153.            
  154.             string pattern = String.Format(@"(?inx)     
  155.         \<(\w+)\s+     
  156.             (     
  157.                 (?'attribute'     
  158.                 (?'attributeName'{0})\s*=\s*     
  159.                 (?'delim'['""]?)     
  160.                 (?'attributeValue'[^'"">]+)     
  161.                 (\3)     
  162.             )     
  163.             |     
  164.             (?'attribute'     
  165.                 (?'attributeName'href)\s*=\s*     
  166.                 (?'delim'['""]?)     
  167.                 (?'attributeValue'javascript[^'"">]+)     
  168.                 (\3)     
  169.             )     
  170.             |     
  171.             [^>]     
  172.         )*     
  173.     \>", eventAttribs ) ;       
  174.             Regex re = new Regex( pattern ) ;       
  175.             // 使用MatchEvaluator的委托       
  176.             return re.Replace( content, new MatchEvaluator( StripAttributesHandler ) ) ;       
  177.         }       
  178.       
  179.         private static string StripAttributesHandler( Match m )       
  180.         {       
  181.             if( m.Groups["attribute"].Success  )       
  182.             {       
  183.                 return m.Value.Replace( m.Groups["attribute"].Value, "") ;       
  184.             }       
  185.             else      
  186.             {       
  187.                 return m.Value ;       
  188.             }       
  189.         }       
  190.       
  191.         public static string FilterAHrefScript(string content)       
  192.         {       
  193.             string newstr=FilterScript(content);       
  194.             string regexstr=@" href[ ^=]*= *[\s\S]*script *:";       
  195.             return Regex.Replace(newstr,regexstr,string.Empty,RegexOptions.IgnoreCase);       
  196.         }       
  197.       
  198.         public static string FilterSrc(string content)       
  199.         {       
  200.             string newstr=FilterScript(content);       
  201.             string regexstr=@" src *= *['""]?[^\.]+\.(js|vbs|asp|aspx|php|jsp)['""]";       
  202.             return Regex.Replace(newstr,regexstr,@"",RegexOptions.IgnoreCase);       
  203.         }       
  204.         /**//*     
  205.   public static string FilterInclude(string content)     
  206.   {     
  207.    string newstr=FilterScript(content);     
  208.    string regexstr=@"<[\s\S]*include *(file|virtual) *= *[\s\S]*\.(js|vbs|asp|aspx|php|jsp)[^>]*>";     
  209.    return Regex.Replace(newstr,regexstr,string.Empty,RegexOptions.IgnoreCase);     
  210.   }     
  211. */      
  212.         public static string FilterHtml(string content)       
  213.         {       
  214.             string newstr=FilterScript(content);       
  215.             string regexstr=@"<[^>]*>";       
  216.             return Regex.Replace(newstr,regexstr,string.Empty,RegexOptions.IgnoreCase);       
  217.         }       
  218.       
  219.         public static string FilterObject(string content)       
  220.         {       
  221.             string regexstr=@"(?i)<Object([^>])*>(\w|\W)*</Object([^>])*>";       
  222.             return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);       
  223.         }       
  224.       
  225.         public static string FilterIframe(string content)       
  226.         {       
  227.             string regexstr=@"(?i)<Iframe([^>])*>(\w|\W)*</Iframe([^>])*>";       
  228.             return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);       
  229.         }       
  230.       
  231.         public static string FilterFrameset(string content)       
  232.         {       
  233.             string regexstr=@"(?i)<Frameset([^>])*>(\w|\W)*</Frameset([^>])*>";       
  234.             return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);       
  235.         }       
  236.       
  237.         //移除非法或不友好字符       
  238.         private static string FilterBadWords(string chkStr)       
  239.         {       
  240.             //这里的非法和不友好字符由你任意加,用“|”分隔,支持正则表达式,由于本Blog禁止贴非法和不友好字符,所以这里无法加上。       
  241.             string BadWords=@"";       
  242.             if (chkStr == "")       
  243.             {       
  244.                 return "";       
  245.             }       
  246.       
  247.             string[] bwords = BadWords.Split('#');       
  248.             int i,j;       
  249.             string str;       
  250.             StringBuilder sb = new StringBuilder();       
  251.             for(i = 0; i< bwords.Length; i++)       
  252.             {       
  253.                 str=bwords[i].ToString().Trim();       
  254.                 string regStr,toStr;       
  255.                 regStr=str;       
  256.                 Regex r=new Regex(regStr,RegexOptions.IgnoreCase | RegexOptions.Singleline| RegexOptions.Multiline);       
  257.                 Match m=r.Match(chkStr);       
  258.                 if(m.Success)       
  259.                 {       
  260.                     j=m.Value.Length;       
  261.                     sb.Insert(0,"*",j);       
  262.                     toStr=sb.ToString();       
  263.                     chkStr=Regex.Replace(chkStr,regStr,toStr,RegexOptions.IgnoreCase | RegexOptions.Singleline| RegexOptions.Multiline);         
  264.                 }       
  265.                 sb.Remove(0,sb.Length);       
  266.             }       
  267.             return chkStr;       
  268.         }       
  269.       
  270.         public static string FilterAll(string content)       
  271.         {       
  272.             content = FilterHtml(content);       
  273.             content = FilterScript(content);       
  274.             content = FilterAHrefScript(content);       
  275.             content = FilterObject(content);       
  276.             content = FilterIframe(content);       
  277.             content = FilterFrameset(content);       
  278.             content = FilterSrc(content);       
  279.             content = FilterBadWords(content);       
  280.             //content = FilterInclude(content);       
  281.             return content;       
  282.         }       
  283.     }       
  284. }       

» 阅读全文

Tags: csharp

[转]看“和风不语”,“陶都风”贴有感

昨天看了两位网友有关宜兴历史文化的贴,孱孱之心,溢于言表。
    一个城市的历史,就是如同这个城市的记忆和灵魂。一个没有记忆和灵魂的城市,只能是一个闹哄哄的菜市场,人声鼎沸过后,除鱼肉的腥味和烂菜的腐味外,什么都没有留下。
    去过东京,这个在二战中几乎毁灭的城市,却在战后重建中保留了自明治维新以来大和民族所有名人的故居。从房屋结构到访客留言。事无巨细,一应完整保留。在商品经济高度发达的东京街头,不期而遇地触摸这个民族并不遥远的历史,感慨良多。苏东坡老先生买田阳羡时,这个民族还在刀耕火种。
    宜兴,并不缺乏厚重的历史和内涵丰富的文化,“和风不语”说的阳羡十景的消失也只是近几十年的事。上两天,我在书香版和摄影版分别发了《从百草园到三味书屋》《枕河而居的绍兴人家》贴。网友“飞英若素”独到的见解,慎密的逻辑,使我想到一个城市就如同一个人,当韶华远去,平添的只是没有智慧的皱纹和白发。
    我们都是小人物,如果大家有兴趣的话,就把小人物无奈的挣扎和呐喊作为一种消遣吧。

» 阅读全文

Tags: 陶都论坛

面对涨价老百姓感受不一 有人一周改吃一次肉

  退休工人彭大爷一家

  一周改吃一次肉

  说起近来对物价的感受,退休工人彭大爷夫妇直截了当地说:“涨得太快了,太贵了!”

  67岁的彭大爷夫妇生活在内蒙古呼和浩特市。他说,今年的价格一直在上涨,猪肉从七八块钱涨到了十三四块,牛羊肉也跟着涨起来
,以前最好的羊肉10块钱一斤,现在已涨到15块。彭大爷夫妇以往每周吃两三次肉,有时红烧,有时做馅,现在改成一周一次了。

  爱吃水果蔬菜的彭大妈感慨:西瓜往年这个时候也就一两毛,今年到5毛就没再下来;香瓜也要两块钱;只有桃便宜些,一块一斤。豆角、青椒、土豆,往年也就四五毛,今年一直在一块四五,真有点吃不起啦!

  在低收入家庭中,用于食品方面的开销占收入的70%左右,有的甚至更高。近来物价尤其是食品价格的上涨,确实对类似彭大爷夫妇的低收入家庭造成不小的影响。记者采访的外来打工者和下岗失业家庭也普遍反映,吃肉的数量明显下降,吃饭的开销增加了约50%,其他方面的花销都压缩了,感觉压力很大,有些吃不消。他们希望,物价上涨慢些,工资增长高些。

  月收入6000元的高先生

  对我影响不太大

  “最近物价是涨得特别快。现在去一些饭店吃饭,服务员都会报出新价格,菜单上的定价都不作准了。”高先生对记者说。

  高先生在北京一家行业协会工作,月收入大概在6000元左右。由于当初来北京的时候,单位分了房子,没有买房子的压力,高先生平时的生活还算宽裕。“平时懒得在家做饭,再加上应酬也比较多,经常去外面吃饭。最近一段时间发现很多饭店没来得及换菜单,就对某些菜实行临时涨价,说是进料都涨价了。我很惊讶,有这么夸张吗?”

  “大不了少点几个肉菜呗!再说了,中国资本市场最近这么火,从股市上赚点钱就可以平掉物价上涨带来的影响。”高先生坦言,对这种收入水平的人来讲,物价上涨的影响并不是很大。“但是,如果物价一直这么涨下去,那肯定会影响生活,毕竟我也不是大富翁。再说了,城市里面还有很多低收入群体埃我以前也穷过,知道穷人生活的艰辛,一毛钱的上涨都会影响他们的开支计划。物价还是不能涨得太快了。”

  群众更关心未来价格走势

  应该打击乱涨价

  彭大爷平时很关心时事。他告诉记者,发改委说了,要打击哄抬物价和联手涨价的行为,千万不能乱涨价呀。

  虽然现在开销多了,但彭大爷很知足:这几年退休工资一直在涨,已经从500多块增加到现在的近900块了。“内蒙古60年大庆,GOVERMENT又给企业退休人员每人涨80元,从今年7月份算起,可能8月底就要兑现了。”彭大爷拿出一张当地的报纸告诉记者,GOVERMENT还给低保家庭15元的猪肉补贴,低保费平均每人也能涨20元。“现在很多政策措施都是针对低收入群众的,感觉很温暖。”彭大爷说。

  掌管家里“财政大权”的彭大妈补充说,最近存款利率涨了,利息税降了,收入也能提高些。1万块钱存一年,光利息税下降就能多得70块钱。

  中国人民大学公共管理学院张正峰副教授说,市场经济条件下,商品价格时涨时跌,就如同大海潮起潮落,是很正常的事情。“我们需要避免的是物价过快上涨。这不仅会使一些低收入群众面临‘吃肉难’的问题,更会影响整个社会经济的发展”。他认为,现在消费品价格上涨过快,受影响最大的当然是低收入群体,中等收入人群肯定也会受到冲击,可能当时感受不明显,时间长了,财富的缩水效应就会凸现出来。

» 阅读全文

今天是星期6,一起床我就收电子邮件.没想到7i24的工作人员真不负责!

今天是星期6,一起床我就收电子邮件.没想到7i24的工作人员真不负责!

在客服专区里明明写着,回复时间最长30分钟,我昨天晚上电子邮件就发出去了,

到今天中午了还没有收到回复.QQ留言也不理我,真是麻烦,不过也没办法了,连系不到他们就拿不到旧版的linkgate,那边的服务器也只好拖拖了,哈哈,苦了一群网友了哦.

刚才接了小姨子一个电话,想想我就火,上次帮他弄的一个比赛创意,是有关环境保护的,回到家里居然告诉她家人,说是她自己做的,我帮她修改的,妈的,真是虚伪的家伙.

以后看我还帮她忙不,

» 阅读全文

昨天发生了一件很郁闷的事情哎!

下午休息的时候在侧所里和朋友聊天,

没想到遇到汪杰了,哈哈,严工也来了,当时没有看到他,在他们下楼的时候看到他们走了,才回办公室.哎,,该发生的总算还是发生了.

晚上加完班被小严叫出去喝酒.

跟他聊了一几个小时,没想到这小子这么不信任我.

生怕我在宜兴的哪个网络公司工作.跟他们作对,不过这怎么会呢,我再怎么样也没有想过要和他们作对啊.

也没想过和他们抢生意,呵呵.

不过还好,和他谈了一些最近的生活,他知道我在电信上班总算是放心了,

好久没见他,小子的头发又长长了很多,比我的头发还长了,

这几天都没怎么休息好,老是想睡觉,睡下去了真的不想起来,好累啊,和他们说明白了之后自己也算是了却了一件心事,以后走在路上也不怕被 别人看到了,哈哈,

今天晚上帮小严弄一下电影服务器,也算是对朋友的一个交待吧.我一直是把他当作朋友的.

不知道他是怎么想的.算了,就写到这里吧.今天得早点休息了,不知道明天会不会起得来呢啊.

好长时间没有弟弟的消息了,不知道他过得怎么样,5月份一定要到无锡去看他一次,我感觉自己这个当哥哥的可真是做得不以家.

弟弟到无锡来这么长时间了都没有去看过他,真是不应该啊!

» 阅读全文

今天在群里看到aj的聊天记录,产生了一些想法

今天在群里看到aj的聊天记录,产生了一些想法.

在我打开QQ的时候看到aj正在谈到网站的运营,看到这个主题,自己深深的思考了一下.结果没有得到什么结论,也许是觉得,在宜兴这里我已经失去了这个条件吧,

不知道为什么,觉得自己的前途很渺茫,不知道自己究竟要做什么才好.想做的事情太多了,终究因为没有思路,和一些条件的限制,也没有能做出什么东西来.

我能做什么呢,自己的是做技术出身的.可是想不出,这个"技术"今后能为自己带来什么,更不知道结婚后能不能养得起这个家,再问自己一次,我能做什么呢?

想来想去,还是想到了自己的老家,有空问问阿飞,看看那边的情况怎么样!也许我的一些想法,只能从远方来帮我实现了.

» 阅读全文

"好饿啊,打完工喂我吃牛肉干好吗?"看着Q宠物的这句话,不禁一阵心酸!

"好饿啊,打完工喂我吃牛肉干好吗?"看着Q宠物的这句话,不禁一阵心酸!,是啊,打完工是有资格要牛肉干吃,我也从来不对我的Q宠吝啬,每回都喂他最喜欢吃的牛肉干,可是哪一天我没有Q币了怎么办呢?我在思考着!

最终的结果是:很遗憾,如果连我自己都没得吃了,我又拿什么来喂你吃呢?

是啊,很简单的一个问题,我却想了很长时间很时间。

想想自己,是在生活吗?我怀疑,这一年来哪怕有一天有时间去做自己想做的事情,去享受自己的人生,那我就承认我生活着。

这么晚了,我相信和我一样没有睡觉的人大有人在,可是我想睡了,我真的想好好睡上一觉,连续工作了一个多月了,没有休息天。

每天回到所谓的家,除了我自己还是我自己,女友的抱怨从南京通过电话传过来没有一天停过,我不怪她,我不在她身边陪她,是我的不对,我想着我们只是暂时的分开,现在努力的工作总有一天我们会在一起的,我总是重复着:"总有一天我们会在一起的,总有一天我们会在一起的"。

总有一天我们会在一起的,是啊,我相信我们总有一天我们会在一起的,可是她为什么会抱怨呢?我也在重复的反问着自己,我为什么不去南京陪她?在这里我得到了什么?真的是除了孤单,什么也没有剩下,在精神上我竟是如此的贫穷。

每天一个人吃饭,一个人睡觉,就是这简单的重复,让我莫名的产生了一种愤怒!不是愤怒别人,而是愤怒自己,24岁了,还能这么不负责任的生活下去吗?回头看看自己是多么的可怜,这让我无法忍受。

"好饿啊,打完工喂我吃牛肉干好吗?",我自己的牛肉干又在哪里呢?一个网络界的程序员却问出这么一个问题。我赶紧反省,自己干了什么?思索良久,我没有干什么,只是重复着"工作 - 吃饭 - 睡觉"。这么一来,问题就很明了了。哦,原来如此。

这种朝不保夕的生活我还要过多久?我还能过多久?

我厌倦了,发自心底的厌倦了。

老婆的抱怨变成了我深深的自责。

» 阅读全文

Tags: 宠物

写在离别之前

安静的夜空,心碎的旋律,写在离别之前!


夜,如平常一样的黑! 为什么黑?因为现在是夜里1:13分! 本来就应该黑。

办公室,还是原来的办公室,工作了一年多的办公室,可办公室里的人的心,却跟平常不一样。为什么不一样?因为他明天就要永远的离别!

可以回忆的太多太多,不知道从何说起。

记得03年的11月18号。11:18分。当我们点燃第一根炮竹的时候,那颗心是如此的兴奋,当我们一起合影准备开创一翻事业的时候,那颗心却是如此的坚定!

记得当初的门面房,寒冷的冬天里,是连一扇挡住严寒的门都没有的门面房,慢慢的慢慢的终于有一它的第一个装饰品,一扇让人开心的玻璃门,再后来,又有了可以帮我们取暖的空调,在40度的夏天里,我们也不觉得那么的心烦意乱!

再后来,我们开始了小康生活,终于搬进了像样的办公室,同样的,装饰一新的办公室,让这颗心是如此的不平静!多少个日日夜夜的努力,让这颗心,越来越看到希望。

而今,这颗心,将要面临着临别...

还记得我们的经典游戏,ra2,还记得在网吧的经典瞬间。好想再和你们再来一局。

还记得一起打台球的日子,大家的水平渐渐的都上来了,好想再和你们来一局。

还记得我们一起抽烟,一边讨论公司的未来,好想再和你们讨论一次。

..................

过了今晚,这一切都将不复存在。

带着这么多的遗憾。这颗心怎堪如此的重负!让我无法安然入睡...

Jsing ,2006-3-7 1:41

» 阅读全文

Tags: 离别

Records:72123456789