博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

参数校验 防止SQL注射攻击一

Posted on 2009-02-20 14:45  ╁蓝驿┲→  阅读(262)  评论(0编辑  收藏  举报

browser_pb Flock 推荐
/// <summary>
        /// 参数校验 防止SQL注射攻击一
        /// 调用:object [] args = new object[6]{realname,address,areacode,contacttel,email,proviceid};
        ///    if(!BaseCheck.CheckParams(args))
        ///    {
        ///        Common.ShowDsMsg("您输入的内容不能通过");
        ///        return;
        ///    }
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        public static bool CheckParams(params object[] args)
        {
            string[] Lawlesses={"=","'"};
            if(Lawlesses==null||Lawlesses.Length<=0)return true; //构造正则表达式,
            //例:Lawlesses是=号和'号,则正则表达式为 .*[=|'].* (由于是想做通用而且容易修改的函数,所以多了一步由字符数组到正则表达式,实际使用中,直接写正则表达式亦可;
            string str_Regex=".*[";
            for(int i=0;i< Lawlesses.Length-1;i++)
                str_Regex+=Lawlesses[i]+"|";
            str_Regex+=Lawlesses[Lawlesses.Length-1]+"].*";
            foreach(object arg in args)
            {
                if(arg is string)//如果是字符串,直接检查
                {
                    if(Regex.Matches(arg.ToString(),str_Regex).Count>0)
                        return false;
                }
                else if(arg is ICollection)//如果是一个集合,则检查集合内元素是否字符串,是字符串,就进行检查
                {
                    foreach(object obj in (ICollection)arg)
                    {
                        if(obj is string)
                        {
                            if(Regex.Matches(obj.ToString(),str_Regex).Count>0)
                                return false;
                        }
                    }
                }
            }
            return true;
        }