asp.net程序防止sql注入源代码

本文介绍两种有效的方法来防止网站遭受SQL注入攻击,包括通过修改代码过滤潜在的恶意输入和利用Application_BeginRequest事件进行全局防护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天自己维护的网站发现有很多超链接,页面全乱了!查询下数据库几乎所有的表都有这个链接,估计就是sql注入了。网上查询了一下,SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别, 所以目前市面的防火墙都不会对SQL注入发出警报。所以只要过滤下即可!有2种方法:

方法一如下:

       在App_Code文件夹中加一个类SqlZr.cs 其内容如下

   public class SqlZr{    

 public SqlZr()   

  {       

  //         // TODO: 在此处添加构造函数逻辑         //   

  }   

 public static string DelSQLStr(string str)  

  {      

  if (str == null || str == "")    

    return "";    

    str = str.Replace(";", "");  

    str = str.Replace("'", "");    

    str = str.Replace("&", "");      

    str = str.Replace("%20", "");    

    str = str.Replace("--", "");      

    str = str.Replace("==", "");      

    str = str.Replace("<", "");     

    str = str.Replace(">", "");      

    str = str.Replace("%", "");     

    str = str.Replace("+", "");    

    str = str.Replace("-", "");      

    str = str.Replace("=", "");   

    str = str.Replace(",", "");    

    return str; 

   }

}  再将所有项目中的Request.QueryString["id"]改为:SqlZr.DelSQLStr(Request.QueryString["id"])即可(推荐)

方法二:

   ///<summary>    ///防止SQL注入    ///</summary>  

  ///<param ></param>  

  ///<param ></param>  

  void Application_BeginRequest(Object sender, EventArgs e)  

  {        StartProcessRequest(); 

    }

#region SQL注入式攻击代码分析
 ///<summary>   

 ///处理用户提交的请求   

  ///</summary> 

   private void StartProcessRequest()  

  {       

 try      

  {         

   string getkeys = "";     

   string sqlErrorPage = "error.aspx";//转向的错误提示页面  

  if (System.Web.HttpContext.Current.Request.QueryString != null) 

           {           

      for (int i = 0; i < System.Web.HttpContext.Current.Request.QueryString.Count; i++)      

          {                

    getkeys = System.Web.HttpContext.Current.Request.QueryString.Keys[i];          

          if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys]))    

                {                     

 System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage);                        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 (getkeys == "__VIEWSTATE") continue;                    if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys]))                    {                        System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage);                        System.Web.HttpContext.Current.Response.End();                    }                }           }        }        catch        {            // 错误处理: 处理用户提交信息!         }    }    ///<summary>    ///分析用户请求是否正常     ///</summary>    ///<param >传入用户提交数据 </param>    ///<returns>返回是否含有SQL注入式攻击代码 </returns>    private bool ProcessSqlStr(string Str)    {        bool ReturnValue = true;        try        {            if (Str.Trim() != "")            {                string SqlStr = "and .exec .insert .select .delete .update .count .* .chr .mid .master .truncate .char .declare";                 string[] anySqlStr = SqlStr.Split('.');                foreach (string ss in anySqlStr)                {                    if (Str.ToLower().IndexOf(ss) >= 0)                    {                        ReturnValue = false;                        break;                    }                }            }        }        catch        {            ReturnValue = false;        }        return ReturnValue;    }    #endregion

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值