ASP.NET中防SQL注入代码与实例

作者:袖梨 2022-06-25

一,验证方法

 代码如下 复制代码

///
///SQL注入过滤
///
/// 要过滤的字符串 /// 如果参数存在不安全字符,则返回true
public static bool SqlFilter2(string InText)
{
string word=”and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join”;
if(InText==null)
return false;
foreach(string i in word.Split(‘|’))
{
if((InText.ToLower().IndexOf(i+” “)>-1)||(InText.ToLower().IndexOf(” “+i)>-1))
{
return true;
}
}
return false;
}

二,Global.asax 事件

 代码如下 复制代码

///
/// 当有数据时交时,触发事件
///
/// /// protected void Application_BeginRequest(Object sender, EventArgs e)
{
//遍历Post参数,隐藏域除外
foreach(string i in this.Request.Form)
{
if(i==”__VIEWSTATE”)continue;
this.goErr(this.Request.Form.ToString());
}
//遍历Get参数。
foreach(string i in this.Request.QueryString)
{
this.goErr(this.Request.QueryString[i].ToString());
}
}

三,Global中的一个方法

 代码如下 复制代码

///
/// 校验参数是否存在SQL字符
///
/// private void goErr(string tm)
{
if(WLCW.Extend.CValidity.SqlFilter2(tm))
this.Response.Redirect(“/error.html”);
}

实例

通常一个一个文件修改不仅麻烦而且还有漏掉的危险,下面我说一上如何从整个系统防止注入。

做到以下三步,相信的程序将会比较安全了,而且对整个网站的维护也将会变的简单。

一、数据验证类
 
      以下是代码片段:

 代码如下 复制代码

        parameterCheck.cs public class parameterCheck{

        public static bool isEmail(string emailString){

        return System.Text.RegularExpressions.Regex.IsMatch(emailString, "['/w_-]+(/.['/w_-]+)

        *@['/w_-]+(/.['/w_-]+)*/.[a-zA-Z]{2,4}");

        }

        public static bool isInt(string intString){

        return System.Text.RegularExpressions.Regex.IsMatch(intString ,"^(/d{5}-/d{4})|(/d{5})

         $");

        }

        public static bool isUSZip(string zipString){

        return System.Text.RegularExpressions.Regex.IsMatch(zipString ,"^-[0-9]+ $|^[0-9]+ $");

        }

        }


二、Web.config

在你的Web.config文件中,在下面增加一个标签,如下:


   
      以下是代码片段:

 代码如下 复制代码

       

       

       


其中key是后面的值为“OrderId-int32”等,其中“-”前面表示参数的名称比如:OrderId,后面的int32表示数据类型。

三、Global.asax

在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.Split('-')[0];

        String parameterType = safeParameters.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("double")){

        if(!parameterCheck.isDouble(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");

        }

        }

以后需要修改的时候我们只需要修改以上三个文件,对整个系统的维护将会大大提高效率,当然你可以根据自己的需要增加其它的变量参数和数据类型。

相关文章

精彩推荐