通过Global.asax防止SQL注入

1月 17, 2013 0 条评论 336 次阅读 0 人点赞

185673899

当项目网站已经发布,有碍于懒得改sql参数化查询,可以试试下面的通过Global.asax。复制以下代码,保存为Global.asax保存到站点根目录就行。

完整代码如下:

<%@ Application Language="C#" %>
<script RunAt="server">

	void Application_Start(object sender, EventArgs e)
	{
		//在应用程序启动时运行的代码
	}

	void Application_End(object sender, EventArgs e)
	{
		//在应用程序关闭时运行的代码
	}

	void Application_Error(object sender, EventArgs e)
	{
		//在出现未处理的错误时运行的代码
	}

	void Session_Start(object sender, EventArgs e)
	{
		//在新会话启动时运行的代码
	}

	void Session_End(object sender, EventArgs e)
	{
		//在会话结束时运行的代码。 
		// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 
		// InProc 时,才会引发 Session_End 事件。如果会话模式 
		//设置为 StateServer 或 SQLServer,则不会引发该事件。

	}
	/// <summary> 
	/// 当有数据时交时,触发事件 
	/// </summary> 
	/// <param name="sender"> </param> 
	/// <param name="e"> </param> 
	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[i].ToString());
		//}
		//遍历Get参数。 
		foreach (string i in this.Request.QueryString)
		{
			this.goErr(this.Request.QueryString[i].ToString());
		}
		//cookie参数 
		if (Request.Cookies != null)
		{
			for (int i = 0; i < Request.Cookies.Count; i++)
			{
				this.goErr(Request.Cookies[Request.Cookies.Keys[i]].Value);
			}
		}
	}

	/// <summary> 
	///SQL注入过滤 
	/// </summary> 
	/// <param name="InText">要过滤的字符串 </param> 
	/// <returns>如果参数存在不安全字符,则返回true </returns> 
	public bool SqlFilter(string InText)
	{
		//Response.Write(InText); 
		string word = "and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join|cmd|;|'|--";//这里加要过滤的SQL字符 
		if (InText == null)
			return false;
		foreach (string i in word.Split('|'))
		{
			if (InText.ToLower().IndexOf(i) > -1)
			{
				return true;
			}
		}
		return false;
	}

	/// <summary> 
	/// 校验参数是否存在SQL字符 
	/// </summary> 
	/// <param name="tm"> </param> 
	private void goErr(string tm)
	{
		if (SqlFilter(tm))
		{
			Response.Write(" <script>window.alert('参数存在不安全字符');window.close();" + " </" + "script>");
			System.Web.HttpContext.Current.Response.End();
		}
	}
</script>

孑愁

一个Microsoft、Google、Apple的爱好者综合体,喜欢一切和数码科技有关的东西,也希望能及时的把这些分享给关注它们的人。现就职于某互联网公司,担任前端

文章评论(0)