范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

c。net全站防止SQL注入类的代码

  c#.net全站防止SQL注入类的代码,需要的朋友可以参考一下
  闲言碎语先不谈,上代码,
  我这个是在Web项目,首先先创建SqlChecker类,用于校验前端传到后台所有请求中的过滤
  using System; using System.Collections.Generic; using System.Linq; using System.Web;  namespace Web {     public class SqlChecker     {         //当前请求对象         private HttpRequest request;         //当前响应对象         private HttpResponse response;         //安全Url,当出现Sql注入时,将导向到的安全页面,如果没赋值,则停留在当前页面         private string safeUrl = String.Empty;          //Sql注入时,可能出现的sql关键字,可根据自己的实际情况进行初始化,每个关键字由"|"分隔开来         //private const string StrKeyWord = @"select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec master|netlocalgroup administrators|:|net user|""|or|and";         private const string StrKeyWord = @"select|insert|delete|from|drop table|update|truncate|exec master|netlocalgroup administrators|:|net user|or|and";         //Sql注入时,可能出现的特殊符号,,可根据自己的实际情况进行初始化,每个符号由"|"分隔开来         private const string StrRegex = @"-|;|,|/|(|)|[|]|}|{|%|@|*|!|"";         //private const string StrRegex = @"=|!|"";         public SqlChecker()         {             //             // TODO: 在此处添加构造函数逻辑             //         }         ///          /// 由此构造函数创建的对象,在验证Sql注入之后将停留在原来页面上         ///          /// 当前请求的 Request 对象         /// 当前请求的 Response 对象         public SqlChecker(HttpRequest _request, HttpResponse _response)         {             this.request = _request;             this.response = _response;         }         ///          /// 由此构造函数创建的对象,在验证Sql注入之后将请求将导向由 _safeUrl 指定的安全url页面上         ///          /// 当前请求的 Request 对象         /// 当前请求的 Response 对象         /// 验证Sql注入之后将导向的安全 url         public SqlChecker(HttpRequest _request, HttpResponse _response, string _safeUrl)         {             this.request = _request;             this.response = _response;             this.safeUrl = _safeUrl;         }         ///          /// 只读属性 SQL关键字         ///          public string KeyWord         {             get             {                 return StrKeyWord;             }         }         ///          /// 只读属性过滤特殊字符         ///          public string RegexString         {             get             {                 return StrRegex;             }         }         ///          /// 当出现Sql注入时需要提示的错误信息(主要是运行一些客户端的脚本)         ///          public string Msg         {             get             {                 string msg = "";                 return msg;             }         }         ///          /// 检查URL参数中是否带有SQL注入的可能关键字。         ///          /// 存在SQL注入关键字时返回 true,否则返回 false         public bool CheckRequestQuery()         {             bool result = false;             if (request.QueryString.Count != 0)             {                 //若URL中参数存在,则逐个检验参数。                 foreach (string queryName in this.request.QueryString)                 {                     //过虑一些特殊的请求状态值,主要是一些有关页面视图状态的参数                     if (queryName == "__VIEWSTATE" || queryName == "__EVENTVALIDATION")                         continue;                     //开始检查请求参数值是否合法                     if (CheckKeyWord(request.QueryString[queryName]))                     {                         //只要存在一个可能出现Sql注入的参数,则直接退出                         result = true;                         break;                     }                 }             }             return result;         }         ///          /// 检查提交表单中是否存在SQL注入的可能关键字         ///          /// 存在SQL注入关键字时返回 true,否则返回 false         public bool CheckRequestForm()         {             bool result = false;             if (request.Form.Count > 0)             {                 //若获取提交的表单项个数不为0,则逐个比较参数                 foreach (string queryName in this.request.Form)                 {                     //过虑一些特殊的请求状态值,主要是一些有关页面视图状态的参数                     if (queryName == "__VIEWSTATE" || queryName == "__EVENTVALIDATION")                         continue;                     //开始检查提交的表单参数值是否合法                     if (CheckKeyWord(request.Form[queryName]))                     {                         //只要存在一个可能出现Sql注入的参数,则直接退出                         result = true;                         break;                     }                 }             }             return result;         }         ///          /// 检查_sword是否包涵SQL关键字         ///          /// 需要检查的字符串         /// 存在SQL注入关键字时返回 true,否则返回 false         public bool CheckKeyWord(string _sWord)         {             bool result = false;             //模式1 : 对应Sql注入的可能关键字             string[] patten1 = StrKeyWord.Split("|");             //模式2 : 对应Sql注入的可能特殊符号             string[] patten2 = StrRegex.Split("|");             //开始检查 模式1:Sql注入的可能关键字 的注入情况             foreach (string sqlKey in patten1)             {                 if (_sWord.IndexOf(" " + sqlKey) >= 0 || _sWord.IndexOf(sqlKey + " ") >= 0)                 {                     //只要存在一个可能出现Sql注入的参数,则直接退出                     result = true;                     break;                 }             }             //开始检查 模式1:Sql注入的可能特殊符号 的注入情况             foreach (string sqlKey in patten2)             {                 if (_sWord.IndexOf(sqlKey) >= 0)                 {                     //只要存在一个可能出现Sql注入的参数,则直接退出                     result = true;                     break;                 }             }             return result;         }         ///          /// 执行Sql注入验证         ///          public void Check()         {             if (CheckRequestQuery() || CheckRequestForm())             {                 response.Write(Msg);                 response.End();             }         }     } }
  创建好SqlChecker后,就要考虑在那个地方使用。下面说全局性设置使用:
  在Global.asax.cs中找到Application_BeginRequest,如果找不到Global.asax 也可Ctrl+F进行搜索,
  范围可以选择【整个解决方案】点击 进行查找。
  具体代码如下:
  protected void Application_BeginRequest(object sender, EventArgs e)         {             SqlChecker SqlChecker = new SqlChecker(this.Request, this.Response);             //或 SqlChecker SqlChecker = new SqlChecker(this.Request,this.Response,safeUrl);             SqlChecker.Check();         }
  局部性设置使用,在具体的Colltroller的方法里加入: SqlChecker SqlChecker = new SqlChecker(this.Request, this.Response); //或 SqlChecker SqlChecker = new SqlChecker(this.Request,this.Response,safeUrl); SqlChecker.Check();
  以上就是C#.net防止SQL注入的代码,如果有些关键字和特殊符号不想加在过滤中可以自定义SqlChecker类的StrKeyWord变量和StrRegex变量

四月你好,来值购的雄安大计萧瑟秋风今又是,换了人间,这是毛主席1954年浪淘沙北戴河中的著名词句,用来形容最近我国的经济外交关系再贴切不过。有礼有节,平和自信不卑不亢,这不仅体现在中美之间的高层对话当中,也谁说大车不好驾驭?我的豪越可不答应很多人印象中,车身尺寸越大,开起来就会越笨重,但是我这段时间用车下来,感觉豪越这车还是非常好开的,驾驶很轻快,市区里面操控也很灵活,并没有笨重感。首先是它1。8T的发动机,参数很亮畅享娱乐从不将就,坚果J10旗舰颠覆体验娱乐是一种让人感觉到快乐有趣的活动,它作为日常生活的消遣,不仅能满足我们的精神需求,还能有效转移我们的注意力,有意识的调整我们当下的状态,是我们释放负面情绪和内在压力的有效途径,所年轻潮人的新宠,华为FreeBuds4,智能生活新伴侣随着经济与科学技术的不断发展,从电话到手机,从有线电视到网络电视人们不断追求更加便捷的生活。人们对耳机的追求当然也不例外,所以无线耳机被研发出来,并成为现当代人的新宠。华为作为电子抵得上5万张纸的手写板!一笔一划直接同步至手机,离线远端存储在数字化高度发展的今天什么资料都要电子版就算手写下来还得敲到电脑上在本子上画个草图得扫描成PDF不仅麻烦,还很容易丢其实,想要把手写的字画的图同步转换成PDF电子版永久保存没想象中几个衣架就能搞定冬天干衣难题,晾干速度快2倍,还能旋转连挂冬天还真是一个让人发愁的季节,冷就不说了,衣服还不容易晾干,恨不得直接挂在风口上了晾着晾着,衣服越来越多,晾衣空间都不够了怎么办?而一般的速干晾衣架,不是贵,就是个头太大不好收纳推iPhone12不配充电头怎么办?盘点值得入手的PD快充头最近数码圈最热门的机型就是iPhone12系列了,5G10个颜色小屏全面屏MagSafe磁吸无线充电除此之外,苹果专门花几分钟吹了一波环保的重要性,顺便表达一下这次不光连祖传的5V亚马逊4。5星好评的卡通电动牙刷,让娃不哭不磨蹭主动刷牙叮!刷牙时间到!想让家里的熊孩子主动刷个牙,那简直比登天还难!让孩子自己刷,TA往往瞎刷几下,敷衍了事。家长帮着刷,控制不好力道容易伤到TA稚嫩的牙龈,让TA更抵触刷牙。身心俱疲之短靴穿得对,气质翻倍!一脚蹬出1。8米既视感!竟然只要百元级每逢换季人的购物欲就特别强烈,包包衣服到鞋子已经列了一长串的list但如果要说秋冬最经典必备的一双靴子,那一定非切尔西短靴莫属。大表姐身穿休闲西装外套搭配紧腿裤和马丁靴,男友风穿搭3秒暖身!这款慕思毛毯软到像躺在云朵里,喜欢裸睡的人都爱了冬天要是不开电热毯钻进被窝那叫一个冷,睡前泡好的脚都白泡了,冰凉的脚辗转反侧怎么都睡不着。对于开电热毯就干到起皮人来说,毛毯才是真爱。毛绒绒的毯子一钻进去就特别暖和,不用再用自己的不到50的支架,让MagSafe卧式秒变立式磁吸立式无线充MagSafe的复活,可能是很多人对今年iPhone发布会意料之外的事。MagSafe是苹果MacBook的标签和符号那个小巧的磁吸充电口,大概和当年iPhone的Home键一样,
科学家开发创新的3D打印技术用光线创造玻璃微结构根据发表在科学杂志上的一项新研究,加州大学伯克利分校的研究人员开发了一种3D打印玻璃微结构的新方法。这种方法速度更快,生产的物体具有更高的光学质量设计灵活性和强度。研究人员与德国弗智慧政务大数据分析应用云平台综合解决方案(90页PPT)声明因转载众多,无法找到真正来源,如标错来源,或对于文中所使用的图片文字链接中所包含的软件资料等,如有侵权,请跟我们联系删除,谢谢。将在收到信息后第一时间进行删除。参考资料来源网络事件智能管理平台实现多源事项接入,赋能城市事件高效处理的平台北明数科事件智能管理平台简介实现多源事项统一接入高位指挥和监督,引入智能分拨引擎实现精准智能事件分派,实现各类事件跨层级跨系统跨部门跨业务的协同管理和服务实现各类事件的接报派单督导小米向AOSP提交代码禁止通过shell直接导出APK出品开源中国文局长小米工程师在向AOSP(AndroidOpenSourceProject)提交的一个commit中指出,应禁止通过shell获取已安装的APK,理由是某些APK可RedmiNote11TPro将首次推出512GB版本卢伟冰又最新公布了该机的一项重磅配置,其将配备512GB超大容量存储空间,这也是小金刚历史上首次推出512GB版本。对于一般用户来说,512GB基本可以满足所有需求,即便三年不清内华为将发布新重磅产品,世界最大电网工程投产!哪些公司能受益?市场主线早盘上证指数窄幅震荡,涨跌家数上涨少跌多,指数下探至3137点迅速拉回到前高后再次回落继续震荡蓄能状态,关键在于震荡过后出中枢的方向,如果向上走关注压力位3190点附近或之RTM正式敲定微软承认Win1122H2版本就是Build22621IT之家5月25日消息,Windows11第一个大版本更新现已敲定。MichaelReinders发现了一份微软刚发布的官方文件,硬件认证页面中提到Windows1122H2版本的K50背刺了?Note11T最高容量512GB容量丨OPPO入门级平板发布今天晚上大家期待已久的redmiNote11T系列就要和我们见面了,相关的配置规格大家应该已经比较熟悉,就简单再回顾一下。RedmiNote11TPro采用6。6英寸FHDLCD屏懒人科技傍身,威马W6能否吹响反击号角?尽管目前的新能源汽车市场还处于发展阶段,但产品竞争却过早地出现了同质化的现象,很多的汽车产品看起来就像是模块化的产物,这些汽车是很难满足当今个性化的年轻消费者的,而那些有新意的设计阿里巴巴店铺托管1688代运营哪家好?选择一家优质的1688托管公司或机构,不仅能够节省费用,而且自己能够全力提高业务或者监督生产,无论对于老板高层管理人员都是非常有好处的,能够把更多的时间放在其他工作上,毕竟人的精力LongChina50分析踩刹车补短板,小鹏汽车抵御风暴成效几何?即使经历疫情种种,你依然看多中国吗?无论如何,作为中国人,你必须寄望于这艘大船能持续航行。如果看多中国,哪些公司最可能拉动中国经济继续前进?纵观过去二十年历史,我们发现,新经济领域