经常要写一些.net的程序,对于数据库的防注入要求要比较高。这时我从网上搜了一些代码。查看了一下主要是通过HTTPModel来进行对客户端转过来的数据进行处理。
       在服务器安全栏目里我写过一篇《破解通用Sql防注入方法》的文章中说到,一些通用的防注入方法中没有对cookie数据进行过滤,会给黑客留下可乘之机。当然我的这段代码对提交过来的cookie数据也进行了过滤。

usingSystem;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Globalization;
namespaceJNYW.StuM.SqlInject

{

publicclassSqlstrAny : IHttpModule

{

publicvoidInit(HttpApplication application)

{

application.BeginRequest +=(new

EventHandler(this.Application_BeginRequest));

}

privatevoidApplication_BeginRequest(Object source, EventArgs e)

{

ProcessRequest pr =newProcessRequest();

pr.StartProcessRequest();

}

publicvoidDispose()

{

}

}

publicclassProcessRequest

{

privatestaticstringSqlStr =System.Configuration.ConfigurationManager.AppSettings["SqlInject"].ToString();

privatestaticstringsqlErrorPage =System.Configuration.ConfigurationSettings.AppSettings["SQLInjectErrPage"].ToString();

///

///用来识别是否是流的方式传输

///

boolIsUploadRequest(HttpRequest request)

{

returnStringStartsWithAnotherIgnoreCase(request.ContentType, "multipart/form-data");

}

///

///比较内容类型

///

privatestaticboolStringStartsWithAnotherIgnoreCase(strings1, strings2)

{

return(string.Compare(s1, 0, s2, 0, s2.Length, true, CultureInfo.InvariantCulture) ==0);

}

//SQL注入式攻击代码分析

#regionSQL注入式攻击代码分析

///

///处理用户提交的请求

///

publicvoidStartProcessRequest()

{

HttpRequest Request =System.Web.HttpContext.Current.Request;

HttpResponse Response =System.Web.HttpContext.Current.Response;

try

{

stringgetkeys ="";

if(IsUploadRequest(Request)) return;  //如果是流传递就退出

//字符串参数

if(Request.QueryString !=null)

{

for(inti =0; i <Request.QueryString.Count; i++)

{

getkeys =Request.QueryString.Keys[i];

if(!ProcessSqlStr(Request.QueryString[getkeys]))

{

Response.Redirect(sqlErrorPage +"?errmsg=QueryString中含有非法字符串&sqlprocess=true");

Response.End();

}

}

}

//form参数

if(Request.Form !=null)

{

for(inti =0; i <Request.Form.Count; i++)

{

getkeys =Request.Form.Keys[i];

if(!ProcessSqlStr(Request.Form[getkeys]))

{

Response.Redirect(sqlErrorPage +"?errmsg=Form中含有非法字符串&sqlprocess=true");

Response.End();

}

}

}

//cookie参数

if(Request.Cookies !=null)

{

for(inti =0; i <Request.Cookies.Count; i++)

{

getkeys =Request.Cookies.Keys[i];

if(!ProcessSqlStr(Request.Cookies[getkeys].Value))

{

Response.Redirect(sqlErrorPage +"?errmsg=Cookie中含有非法字符串&sqlprocess=true");

Response.End();

}

}

}

}

catch

{

//错误处理: 处理用户提交信息!

Response.Clear();

Response.Write("CustomErrorPage配置错误");

Response.End();

}

}

///分析用户请求是否正常

///传入用户提交数据

///返回是否含有SQL注入式攻击代码

privateboolProcessSqlStr(stringStr)

{

boolReturnValue =true;

try

{

if(Str !="")

{

string[] anySqlStr =SqlStr.Split('|');

foreach(stringss inanySqlStr)

{

if(Str.IndexOf(ss) >=0)

{

ReturnValue =false;

break;

}

}

}

}

catch

{

ReturnValue =false;

}

returnReturnValue;

}

#endregion

}

}

在实际使用时,我们要在Web.config文件中的配置节中加上下面的代码

以下是示例代码:

<!--防SQL注入设置-->
  <appSettings>
    <add key="SQLInject"value="and|exec|insert|select|delete|update|count|*|char|mid|master|truncate|char|declare"/>
    <add key="SQLInjectErrPage"value="ShowErr.aspx"/>
  </appSettings>

并且在Web.Config文件的<SYSTEM.WEB>中再加上下面的代码。 以下是示例代码:

<!--防SQL注入设置-->
      <httpModules>
           <add name="SqlstrAny"type="JNYW.StuM.SqlInject.SqlstrAny"/>
      </httpModules>

转载于:https://www.cnblogs.com/liuwei8278/archive/2011/03/23/1992913.html

ASP.NET防注入相关推荐

  1. ASP绕过防注入的新思路

    要想绕过防注入,就要打碎关键字.假如有类似这么一段防注入代码: <% id=request("id") id=replace(id,"and"," ...

  2. asp.net 防注入

    http://www.cnblogs.com/zxlin25/archive/2009/03/09/1407237.html 转载于:https://www.cnblogs.com/alwayscai ...

  3. ASP。NET 中SQL防注入攻击

    一.什么是SQL注入式攻击 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影 ...

  4. SQL防注入程序 v1.0

    /// ***************C#版SQL防注入程序 v1.0************ /// *使用方法: /// 一.整站防注入(推荐) /// 在Global.asax.cs中查找App ...

  5. guestbook.php注入,php防注入留言板(simple)

    新手学php,试手案例便是留言板.以前未连接数据库时,我是直接将用户输入的留言写入到一个txt,然后再从txt读取显示(~.~别鄙视). 最近学习了php访问MySQL数据库的一些知识,重写了一下留言 ...

  6. web渗透(asp数字型注入模拟实战)

    昨晚花了一整晚的时间找一套没有防注入的网站源码,太难找了,今天六点多就起床,终于找到了.(原谅我笨) 打开虚拟机→打开asp小旋风→将网站程序放到asp小旋风下的wwwroot目录,打开网址http: ...

  7. PDO防注入原理分析以及使用PDO的注意事项 (转)

    我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下两个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...

  8. [转]PDO防注入原理分析以及使用PDO的注意事项

    原文:http://zhangxugg-163-com.iteye.com/blog/1835721 好文章不得不转. 我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答 ...

  9. php注入类,简单实用的PHP防注入类实例

    这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下 本文实例讲述了简单实用的PHP防注入类 ...

最新文章

  1. 梯度下降法与批量梯度下降法的简洁公式总结
  2. 结棍!Spring 支持 PHP 了!?
  3. MySQL数据类型中DECIMAL的作用和用法
  4. matlab 排列 拆分,在matlab中将列表拆分为多个变量
  5. 十月 android版本分布,安兔兔发布2018年10月份Android手机性能排行榜
  6. php根据手机号码获取省份
  7. linux运维架构师职业规划
  8. “咕”了 73 天,何同学终于回归:最喜欢 3D 打印机,但不要买
  9. python对象_Python对象()
  10. 软件体系架构课下作业01
  11. Nutch 深入浅出
  12. 支持bt,种子,torrent的离线下载网页版工具!
  13. linux 安装 rtl8111e / r8168 驱动
  14. java 获取微信公众号文章 使用搜狗微信搜索
  15. 金山WPS暑期前端实习一面凉经
  16. html2d动画,HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
  17. 电脑中找不到ie浏览器怎么办
  18. 关于aop,AOP的应用场景?什么事AOP?
  19. 揭秘阿里、腾讯、字节跳动在家办公的区别
  20. iphone android同花顺,九成Android手机已内置同花顺手机炒股

热门文章

  1. Web狗的CTF出题套路
  2. POJ 2411: Mondriaan's Dream
  3. 4G/5G多卡聚合设备在公安无线传输中的解决方案
  4. 3D打印机模型设备设计 毕业设计(论文)开题报告
  5. egg使用egg-socket.io
  6. DXGI快速截屏录屏技术
  7. nvm安装node,但npm和node不识别
  8. 【java】Java中-> 是什么意思?
  9. 做好软件测试需要具备的思维方式
  10. A091_hrm07_用户中心_注册