当前位置: 代码迷 >> ASP.NET >> 过滤sql特殊字符,防止sql注击的方法
  详细解决方案

过滤sql特殊字符,防止sql注击的方法

热度:5692   发布时间:2013-02-25 00:00:00.0
求一个过滤sql特殊字符,防止sql注击的方法
由于以前的大量的使用了拼接sql语句,要一个一个改成传参数的形式,时间不允许

想过滤掉特殊字符,防止sql注击

------解决方案--------------------------------------------------------
//获得关键子
public int CheckKey(string Content)
{
int n = -1;
string str = "'|&quot|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|''|--|;|;|or";
String[] Array = str.Split('|');
foreach (string item in Array)
{
int index = Content.IndexOf(item);
if (index != -1)
{
n = index;
break;
}

}
return n;

}

Content是你的有参数的url,如果返回的不是-1就说明有sql攻击的关键字
楼主研究下
------解决方案--------------------------------------------------------
up
------解决方案--------------------------------------------------------
将以下代码放入Global.asax中,
然后在 Application_BeginRequest 里面添加调用 StartProcessRequest();


C# code
#region SQL注入式攻击代码分析         ///  <summary>         /// 处理用户提交的请求         ///  </summary>         private void StartProcessRequest()         {             try             {                 string getkeys = "";                 string sqlErrorPage = "/index.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 name="Str">传入用户提交数据 </param>         ///  <returns>返回是否含有SQL注入式攻击代码 </returns>         private bool ProcessSqlStr(string Str)         {             bool ReturnValue = true;             try             {                 if (Str.Trim() != "")                 {                     string SqlStr = "exec |insert |select |delete |update |count |* |mid |master |truncate |char |declare";                     string[] anySqlStr = SqlStr.Split('|');                     foreach (string ss in anySqlStr)                     {                         if (Str.ToLower().IndexOf(ss.Trim()) >= 0)                         {                            ReturnValue = false;                             break;                         }                     }                 }             }             catch             {                 ReturnValue = false;             }             return ReturnValue;         }         #endregion
  相关解决方案