网站安全性:C#防SQL注入代码的实现方法 下面说下网站防注入的几点要素。 一:丢弃SQL语句直接拼接,虽然这个写起来很快很方便。 二:如果用SQL语句,那就使用参数化,添加Param 三:尽可能的使用存储过程,安全性能高而且处理速度也快 四:屏蔽SQL,javascript等注入(很是主要的),对于每个文件写是不太可能的。所以要找到对所有文件起作用的办法。我在网上收集了以下3种方法 C#防SQL注入方法一 在Web.config文件中, <?appSettings>下面增加一个标签:如下 < appSettings>?? < add key="safeParameters" value="OrderID-int32,CustomerEmail-email,ShippingZipcode-USzip" />?? < /appSettings>? C#防SQL注入方法二 在Global.asax中增加下面一段: protected void Application_BeginRequest(Object sender, EventArgs e){?? String[] safeParameters = System.Configuration.ConfigurationSettings.AppSettings["safeParameters"].ToString().Split(',');?? for(int i= 0 ;i <? safeParameters.Length; i++){?? String parameterName = safeParameters[i].Split('-')[0];?? String parameterType = safeParameters[i].Split('-')[1];?? isValidParameter(parameterName, parameterType);?? }?? }?? public void isValidParameter(string parameterName, string parameterType){?? string parameterValue = Request.QueryString[parameterName];?? if(parameterValue == null) return;?? if(parameterType.Equals("int32")){?? if(!parameterCheck.isInt(parameterValue)) Response.Redirect("parameterError.aspx");?? }?? else if (parameterType.Equals("USzip")){?? if(!parameterCheck.isUSZip(parameterValue)) Response.Redirect("parameterError.aspx");?? }?? else if (parameterType.Equals("email")){?? if(!parameterCheck.isEmail(parameterValue)) Response.Redirect("parameterError.aspx");?? }?? }? 使用字符串过滤类 using System;? namespace web.comm? { ? ????/**////?<?summary> ? ????///?ProcessRequest?的摘要说明。 ? ????///?<?/summary> ? ????public?class?ProcessRequest ? ????{ ? ????????public?ProcessRequest() ? ????????{ ? ????????????// ? ????????????//?TODO:?在此处添加构造函数逻辑 ? ????????????// ? ????????} ? ????????SQL注入式攻击代码分析#region?SQL注入式攻击代码分析 ? ????????/**////?<?summary> ? ????????///?处理用户提交的请求 ? ????????///?<?/summary> ? ????????public?static?void?StartProcessRequest() ? ????????{ ? ? //????????????System.Web.HttpContext.Current.Response.Write("<?script>alert('dddd');<?/script>"); ? ????????????try? ????????????{ ? ????????????????string?getkeys?=?""; ? ????????????????//string?sqlErrorPage?=?System.Configuration.ConfigurationSettings.AppSettings["CustomErrorPage"].ToString(); ? ????????????????if?(System.Web.HttpContext.Current.Request.QueryString?!=?null) ? ????????????????{ ? ? ????????????????????for(int?i=0;i<?System.Web.HttpContext.Current.Request.QueryString.Count;i++) ? ????????????????????{ ? ????????????????????????if?(!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys],0)) ? ????????????????????????{ ? ????????????????????????????//System.Web.HttpContext.Current.Response.Redirect?(sqlErrorPage+"?errmsg=sqlserver&sqlprocess=true"); ? ????????????????????????????System.Web.HttpContext.Current.Response.Write("<?script>alert('请勿非法提交!');history.back();<?/script>"); ? ????????????????????????????System.Web.HttpContext.Current.Response.End(); ? ????????????????????????} ? ????????????????????} ? ????????????????} ? ????????????????if?(System.Web.HttpContext.Current.Request.Form?!=?null) ? ????????????????{ ? ????????????????????for(int?i=0;i<?System.Web.HttpContext.Current.Request.Form.Count;i++) ? ????????????????????{ ? ????????????????????????getkeys?=?System.Web.HttpContext.Current.Request.Form.Keys[i]; ? ????????????????????????if?(!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys],1)) ? ????????????????????????{ ? ????????????????????????????System.Web.HttpContext.Current.Response.Write("<?script>alert('请勿非法提交!');history.back();<?/script>"); ? ????????????????????????????System.Web.HttpContext.Current.Response.End(); ? ????????????????????????} ? ????????????????????} ? ????????????????} ? ????????????} ? ????????????catch? ????????????{ ? ????????????????//?错误处理:?处理用户提交信息! ? ????????????} ? ????????} ? ????????/**////?<?summary> ? ????????///?分析用户请求是否正常 ? ????????///?<?/summary> ? ????????///?<?param?name="Str">传入用户提交数据<?/param> ? ????????///?<?returns>返回是否含有SQL注入式攻击代码<?/returns> ? ????????private?static?bool?ProcessSqlStr(string?Str,int?type) ? ????????{ ? ????????????string?SqlStr; ? ????????????if(type?==?1) ? ????????????????SqlStr?=?pdf"exec?|insert?|select?|delete?|update?|count?|chr?|mid?|master?|truncate?|char?|declare?"; ? ????????????bool?ReturnValue?=?true; ? ????????????try? ????????????{ ? ????????????????if?(Str?!=?"") ? ????????????????{ ? ????????????????????string[]?anySqlStr?=?SqlStr.Split('|'); ? ????????????????????foreach?(string?ss?in?anySqlStr) ? ????????????????????{ ? ????????????????????????if?(Str.IndexOf(ss)>=0) ? ????????????????????????{ ? ????????????????????????????ReturnValue?=?false; ? ????????????????????????} ? ????????????????????} ? ????????????????} ? ????????????} ? ????????????catch? ????????????{ ? ????????????????ReturnValue?=?false; ? ????????????} ? ????????????return?ReturnValue; ? ????????} ?
?对于网站的安全性,是每个网站开发者和运营者最关心的问题。网站一旦出现漏洞,那势必将造成很大的损失。为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全设施要做到位。
其中key是 < saveParameters>后面的值为"OrderId-int32"等,其中"-"前面表示参数的名称比如:OrderId,后面的int32表示数据类型。
C#防SQL注入方法三
下一篇:?雅虎全球搜索业务副总裁张智超将离职
详细解决方案
C#怎么防SQL注入代码的实现一种小方法
热度:67 发布时间:2016-05-05 13:10:31.0
getkeys=System.Web.HttpContext.Current.Request.QueryString.Keys[i]; if(!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys],0)) { //System.Web.HttpContext.Current.Response.Redir
?
?getkeys?=?System.Web.HttpContext.Current.Request.QueryString.Keys[i]; ?
上一篇:?杭州“坠楼女孩”恢复态势良好
相关解决方案