灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2353回复:0

在.net封装了以后sql防注入解决办法

楼主#
更多 发布于:2012-10-23 17:44

 网站不小心中招了,在网上整理了一个简单的防注入方法,和大家分享

web.config文件调用

SqlInPost.cs 放到app_code 目录下:

SqlInPost.cs

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Text.RegularExpressions;

using System.Collections.Specialized;

namespace SqlIn

{

///

/// SqlInPost 的摘要说明

///

 

public class SqlInPost:IHttpHandlerFactory

{

public SqlInPost()

{

//

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

//

}

public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)

{

//得到编译实例(通过反射)

PageHandlerFactory factory = (PageHandlerFactory)Activator.CreateInstance(typeof(PageHandlerFactory), true);

IHttpHandler handler = factory.GetHandler(context, requestType, url, pathTranslated);

//过滤字符串

if (requestType == "POST")

{

Page page = handler as Page;

if (page != null)

page.PreLoad += new EventHandler(FilterStrFactoryHandler_PreLoad);

}

if (requestType == "GET")

{

Page page = handler as Page;

if (page != null)

page.PreLoad += new EventHandler(FilterStrFactoryHandler_PreLoad1);

}

//返回

return handler;

}

//过滤TextBox、Input和Textarea中的特殊字符

void FilterStrFactoryHandler_PreLoad(object sender, EventArgs e)

{

try

{

Page page = sender as Page;

NameValueCollection postData = page.Request.Form;

foreach (string postKey in postData)

{

Control ctl = page.FindControl(postKey);

if (ctl as TextBox != null)

{

((TextBox)ctl).Text = Common.InputText(((TextBox)ctl).Text);

continue;

}

if (ctl as HtmlInputControl != null)

{

((HtmlInputControl)ctl).Value = Common.InputText(((HtmlInputControl)ctl).Value);

continue;

}

if (ctl as HtmlTextArea != null)

{

((HtmlTextArea)ctl).Value = Common.InputText(((HtmlTextArea)ctl).Value);

continue;

}

}

}

catch { }

}

//过滤QueryString

void FilterStrFactoryHandler_PreLoad1(object sender, EventArgs e)

{

try

{

Page page = sender as Page;

NameValueCollection QueryNV = page.Request.QueryString;

bool isSafe = true;

for (int i = 0; i < QueryNV.Count; i++) { if (!IsSafeString(QueryNV.Get(i))) { isSafe = false; break; } } if (!isSafe) { page.Response.Write("非法传值!"); page.Response.End(); } } catch { } } public virtual void ReleaseHandler(IHttpHandler handler) { } //判断是否为安全字符串public bool IsSafeString(string p) { bool ret = true; string[] UnSafeArray = new string[22]; UnSafeArray[0] = "'"; UnSafeArray[1] = "xp_cmdshell"; UnSafeArray[2] = "exec master.dbo.xp_cmdshell"; UnSafeArray[3] = "net localgroup administrators"; UnSafeArray[4] = "delete from"; UnSafeArray[5] = "net user"; UnSafeArray[6] = "/add"; UnSafeArray[7] = "drop table"; UnSafeArray[8] = "update "; UnSafeArray[9] = "select"; UnSafeArray[10] = ";and"; UnSafeArray[11] = ";exec"; UnSafeArray[12] = ";create"; UnSafeArray[13] = ";insert"; UnSafeArray[14] = "and"; UnSafeArray[15] = "exec"; UnSafeArray[16] = "create"; UnSafeArray[17] = "insert"; UnSafeArray[18] = "master.dbo"; UnSafeArray[19] = ";--"; UnSafeArray[20] = "--"; UnSafeArray[21] = "1="; foreach (string s in UnSafeArray) { if (p.ToLower().IndexOf(s) > -1)

{

ret = false;

break;

}

}

return ret;

}

}

public class Common

{

public static string InputText(string text)

{

text = text.Trim();

if (string.IsNullOrEmpty(text))

return string.Empty;

text = Regex.Replace(text, "[s]{2,}", " "); //two or more spaces

 

text = Regex.Replace(text, "()+|()", "n"); //

text = Regex.Replace(text, "(s*;[n|N][b|B][s|S][p|P];s*)+", " "); //

text = Regex.Replace(text, "", string.Empty); //any other tags

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

text = text.Replace("xp_cmdshell", "");

text = text.Replace("exec master.dbo.xp_cmdshell", "");

text = text.Replace("net localgroup administrators", "");

text = text.Replace("delete from", "");

text = text.Replace("net user", "");

text = text.Replace("/add", "");

text = text.Replace("drop table", "");

text = text.Replace("update", "");

return text;

}

}

}&#8203;


喜欢0 评分0
游客

返回顶部