由于以前的大量的使用了拼接sql语句,要一个一个改成传参数的形式,时间不允许
想过滤掉特殊字符,防止sql注击
------解决方案--------------------------------------------------------
//获得关键子
public int CheckKey(string Content)
{
int n = -1;
string str = "'|"|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