ASP.NET防注入
经常要写一些.net的程序,对于数据库的防注入要求要比较高。这时我从网上搜了一些代码。查看了一下主要是通过HTTPModel来进行对客户端转过来的数据进行处理。
在服务器安全栏目里我写过一篇《破解通用Sql防注入方法》的文章中说到,一些通用的防注入方法中没有对cookie数据进行过滤,会给黑客留下可乘之机。当然我的这段代码对提交过来的cookie数据也进行了过滤。
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文件中的配置节中加上下面的代码
以下是示例代码:
<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>中再加上下面的代码。 以下是示例代码:
<httpModules>
<add name="SqlstrAny"type="JNYW.StuM.SqlInject.SqlstrAny"/>
</httpModules>
转载于:https://www.cnblogs.com/liuwei8278/archive/2011/03/23/1992913.html
ASP.NET防注入相关推荐
- ASP绕过防注入的新思路
要想绕过防注入,就要打碎关键字.假如有类似这么一段防注入代码: <% id=request("id") id=replace(id,"and"," ...
- asp.net 防注入
http://www.cnblogs.com/zxlin25/archive/2009/03/09/1407237.html 转载于:https://www.cnblogs.com/alwayscai ...
- ASP。NET 中SQL防注入攻击
一.什么是SQL注入式攻击 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影 ...
- SQL防注入程序 v1.0
/// ***************C#版SQL防注入程序 v1.0************ /// *使用方法: /// 一.整站防注入(推荐) /// 在Global.asax.cs中查找App ...
- guestbook.php注入,php防注入留言板(simple)
新手学php,试手案例便是留言板.以前未连接数据库时,我是直接将用户输入的留言写入到一个txt,然后再从txt读取显示(~.~别鄙视). 最近学习了php访问MySQL数据库的一些知识,重写了一下留言 ...
- web渗透(asp数字型注入模拟实战)
昨晚花了一整晚的时间找一套没有防注入的网站源码,太难找了,今天六点多就起床,终于找到了.(原谅我笨) 打开虚拟机→打开asp小旋风→将网站程序放到asp小旋风下的wwwroot目录,打开网址http: ...
- PDO防注入原理分析以及使用PDO的注意事项 (转)
我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下两个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...
- [转]PDO防注入原理分析以及使用PDO的注意事项
原文:http://zhangxugg-163-com.iteye.com/blog/1835721 好文章不得不转. 我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答 ...
- php注入类,简单实用的PHP防注入类实例
这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下 本文实例讲述了简单实用的PHP防注入类 ...
最新文章
- 梯度下降法与批量梯度下降法的简洁公式总结
- 结棍!Spring 支持 PHP 了!?
- MySQL数据类型中DECIMAL的作用和用法
- matlab 排列 拆分,在matlab中将列表拆分为多个变量
- 十月 android版本分布,安兔兔发布2018年10月份Android手机性能排行榜
- php根据手机号码获取省份
- linux运维架构师职业规划
- “咕”了 73 天,何同学终于回归:最喜欢 3D 打印机,但不要买
- python对象_Python对象()
- 软件体系架构课下作业01
- Nutch 深入浅出
- 支持bt,种子,torrent的离线下载网页版工具!
- linux 安装 rtl8111e / r8168 驱动
- java 获取微信公众号文章 使用搜狗微信搜索
- 金山WPS暑期前端实习一面凉经
- html2d动画,HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
- 电脑中找不到ie浏览器怎么办
- 关于aop,AOP的应用场景?什么事AOP?
- 揭秘阿里、腾讯、字节跳动在家办公的区别
- iphone android同花顺,九成Android手机已内置同花顺手机炒股