防sql注入:使用 HttpModule实现sql防注入



sql注入是被谈很多个话题有很多思路方法能够实现sql防注入在这里就简单说下如果使用HttpModule来实现sql防注入

在项目中添加个类让其实现IHttpModule接口IHttpModule接口有两个思路方法 Init 和 Dispose然后在Init思路方法中来订阅

AcquireRequestState事件

public void Dispose
{

}

public void Init(HttpApplication context)
{
//Begin_Request时还没有加载Session状态
context.AcquireRequestState EventHandler(context_AcquireRequestState);
}

为什么是AcquireRequestState 事件而不是Begin_Request呢 在Begin_Request执行时候还没有加载session状态而在处理时侯

可能会用到session

在AcquireRequestState 事件中我们就要进行相应处理了思路如下般网站WebSite提交数据只有两个地方表单和url所有就在该事件中将从这两处

提交数据截取判断是否有些危险然后做相应处理代码如下

private void context_AcquireRequestState(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;

try
{
getkeys = .Empty;
sqlErrorPage = "~/Error.aspx";//转向提示页面
keyvalue = .Empty;

requestUrl = context.Request.Path.;
//url提交数据
(context.Request.QueryString != null)
{
for ( i = 0; i < context.Request.QueryString.Count; i)
{
getkeys = context.Request.QueryString.Keys[i];
keyvalue = context.Server.UrlDecode(context.Request.QueryString[getkeys]);

(!ProcessSqlStr(keyvalue))
{
context.Response.Redirect(sqlErrorPage);
context.Response.End;
;
}
}
}
//表单提交数据
(context.Request.Form != null)
{
for ( i = 0; i < context.Request.Form.Count; i)
{
getkeys = context.Request.Form.Keys[i];
keyvalue = context.Server.HtmlDecode(context.Request.Form[i]);//[getkeys];
(getkeys "__VIEWSTATE") continue;
(!ProcessSqlStr(keyvalue))
{
context.Response.Redirect(sqlErrorPage);
context.Response.End;
;
}
}
}
}
catch (Exception ex)
{
}
}
上面代码只是做了简单处理当然也可以在事件中将输入非法关键字用户ip ,操作页面url,时间等信息记录在数据库中或是记录在日志中
而且还用到了个叫ProcessSqlStr思路方法这个思路方法就是用来处理判断是否合法如下

private bool ProcessSqlStr( str)
{
bool Value = true;
try
{
(str.Trim != "")
{
// sqlStr = ConfigurationManager.AppSettings["FilterSql"].Trim;
sqlStr = "declare |exec|varchar|cursor|begin|open |drop |creat |select |truncate";

sqlStrs = sqlStr.Split('|');
foreach ( ss in sqlStrs)
{
(str.ToLower.IndexOf(ss) >= 0)
{
m_sqlstr = ss;
Value = false;
;
}
}
}
}
catch
{
Value = false;
}
Value;
}
到这儿类就写好了再在web.config中做相应配置就大功告成

<httpModules>
<add type="HttpModule" name="HttpModule"/>
</httpModules>
用这种思路方法很方便只需在这处做处理全站都能应用到不过如果个用户想用varchar 等sql关键字来做用户名注册话也会被挡掉

不过应该没有人这么无聊吧呵呵.
Tags:  sql防注入代码 asp防sql注入 sql通用防注入系统 防sql注入

延伸阅读

最新评论

  1. 帮助网站站长解决最近流行的com/css/c.js注入问题!   我找了很多人,但是都没有给我解决掉。骗子太多了。 现在我站出来,希望能帮助大家解决掉问题,如果你的站也跟我说的一样,请按照我的文字做下去。       最终还是通过自己写的代码解决了问题。      SQL注入问题,com/css/c.js病毒的清除方法。   最近流行的病毒SQL代码:Script Src=>   现已找到解决办法。   暂时清除的办法可以使用如下命令:   update 表名 set 表项=replace(cast(表项 as varchar(8000)),’病毒代码段’,’’) 如下我写的一段标准的: update hezu set Xiaoqm=replace(cast(Xiaoqm as varchar(8000)),'','') 这个可以回车换行后,多条一起执行的。      在查询分析器中执行即可。      直接的清除方法,需要在CONN.ASP中加入:   如下代码:   (靠,代码超过6000字符。系统不给我发布。郁闷。有需要的直接加我QQ吧)      好了,如果你还有不明白的,可以联系我QQ:528407      保证你不再被入侵。

发表评论