asp.net中防止Sql注入的方法- 转
转自http://wenku.baidu.com/view/e9a489240722192e4536f6b2.html
原理很简单:使用Global.asax中的Application_BeginRequest(object sender, EventArgs e)事件,实现表单或URL提交数据的获取,然后通过SQLInjectionHelper类完成恶意代码的检查。
本代码只是考虑到通用性和部署简易性,因为项目已经开发完毕,并已经上线,为避免大量修改,才写的这个通用程序,大家可以在这里面加入不需要检查的表单值,这样不检查某些字段也是可以实现的。
直接贴代码:
Global.ascx.cs
//在接收到一个应用程序请求时触发。对于一个请求来说,它是第一个被触发的事件,请求一般是用户输入的一个页面请求(URL)。
void Application_BeginRequest(object sender, EventArgs e)
{
//Response.Write("通用注入检查");
bool result = false;
if (Request.RequestType.ToUpper() == "POST")
{
result = SQLInjectionHelper.ValidUrlPostData();//Post数据检查
}
else
{
result = SQLInjectionHelper.ValidUrlGetData();//Get数据检查
}
if (result)
{
Response.Write("您提交的数据有恶意字符!");
Response.Write("<script>alert('您提交的数据有恶意字符!');<//script>");
Response.End();
}
}
SQLInjectionHelper.cs注入检测辅助类
/// <summary>
/// 获取Post的数据
/// </summary>
public static bool ValidUrlPostData()
{
bool result = false;
for (int i = 0; i < HttpContext.Current.Request.Form.Count; i++)
{
result = ValidData(HttpContext.Current.Request.Form[i].ToString());
if (result)
{
break;
}//如果检测存在漏洞
}
return result;
}
/// <summary>
/// 获取QueryString中的数据
/// </summary>
public static bool ValidUrlGetData()
{
bool result = false;
for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i++)
{
result = ValidData(HttpContext.Current.Request.QueryString[i].ToString());
if (result)
{