`

使用HttpModule实现sql防注入

阅读更多

 

使用HttpModule实现sql防注入

 

 

asp.net处理Http请求时,程序得到一个请求的时候,第一个会经过Http运行时,即编译过程,在这里我们的请求会被转化为机器懂的语言。下一个,我们的请求经过不同的HttpModule,即Http模块。事实上,我们的请求到达模块时系统没有对这个请求做任何的处理,也就是说此时对于请求来讲,模块是一个请求的“必经之路”。

 

模块可以在这个Http请求到达真正的处理中心(HttpHandler)之前,针对这个Http请求做一些额外的工作,或者在某些情况下干脆终止满足一些条件的Http请求,从而起到一个过滤器的作用。在经过我们的模块之后,我们的Http请求才到达真正的处理中心(HttpHandler)。Http请求在经过处理之后,原路返回,经过模块,进过运行时,返回到客户端。

 

那么既然我们的请求无论如何都会经过HttpModule,那么我们就可以在此进行一些判断(如是否有SQL关键字等)。

 

 

使用HttpModule完整代码:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
namespace DotNet.Common.WebForm
{
    /**//// <summary> 
    /// 简单防止sql注入 
    /// </summary> 
    public class SqlHttpModule : IHttpModule
    {
        public void Dispose()
        {
        }
        public void Init(HttpApplication context)
        {
            context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
        }
        /**//// <summary> 
        /// 处理sql注入 
        /// </summary> 
        /// <param name="sender"></param> 
        /// <param name="e"></param> 
        private void context_AcquireRequestState(object sender, EventArgs e)
        {
            HttpContext context = ((HttpApplication)sender).Context;
            try
            {
                string key = string.Empty;
                string value = string.Empty;
                //url提交数据 get方式 
                if (context.Request.QueryString != null)
                {
                    for (int i = 0; i < context.Request.QueryString.Count; i++)
                    {
                        key = context.Request.QueryString.Keys[i];
                        value = context.Server.UrlDecode(context.Request.QueryString[key]);
                        if (!FilterSql(value))
                        {
                            throw new Exception("QueryString(GET) including dangerous sql key word!");
                        }
                    }
                }
                //表单提交数据 post方式 
                if (context.Request.Form != null)
                {
                    for (int i = 0; i < context.Request.Form.Count; i++)
                    {
                        key = context.Request.Form.Keys[i];
                        if (key == "__VIEWSTATE") continue;
                        value = context.Server.HtmlDecode(context.Request.Form[i]);
                        if (!FilterSql(value))
                        {
                            throw new Exception("Request.Form(POST) including dangerous sql key word!");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /**//// <summary> 
        /// 过滤非法关键字,这个可以按照项目灵活配置 
        /// </summary> 
        /// <param name="key"></param> 
        /// <returns></returns> 
        private bool FilterSql(string key)
        {
            bool flag = true;
            try
            {
                if (!string.IsNullOrEmpty(key))
                {
                    //一般配置在公共的文件中,如xml文件,txt文本等等 
                    string sqlStr = "insert |delete |select |update |exec |varchar |drop |creat |declare |truncate |cursor |begin |open|<-- |--> ";
                    string[] sqlStrArr = sqlStr.Split('|');
                    foreach (string strChild in sqlStrArr)
                    {
                        if (key.ToUpper().IndexOf(strChild.ToUpper()) != -1)
                        {
                            flag = false;
                            break;
                        }
                    }
                }
            }
            catch
            {
                flag = false;
            }
            return flag;
        }
    }
} 

 

 

 

参考资料:    如何使用HttpModule实现sql防注入      http://www.studyofnet.com/news/290.html

 

分享到:
评论

相关推荐

    asp.net利用HttpModule实现防sql注入

    在标题所提及的"asp.net利用HttpModule实现防sql注入"中,我们首先创建一个名为`SqlHttpModule`的类,该类实现了`IHttpModule`接口。`IHttpModule`接口提供了在ASP.NET应用程序中定义自定义模块的方法,这些模块可以...

    【ASP.NET编程知识】ASP.NET防止SQL注入的方法示例.docx

    ASP.NET 防止 SQL 注入攻击的方法有很多,这些方法包括参数法防注入、传统的笨一点的办法、HttpModule 实现防sql注入、SqlFilter 防止 SQL 注入、validation 防止 SQL 注入等。只有通过使用这些方法,才能有效地防止...

    ASP.Net防SQL注入的HttpMoudule

    `DeSqlInjection.dll`这个文件可能是一个编译好的DLL库,包含实现了防SQL注入功能的自定义HttpModule。开发者可以将这个模块添加到ASP.NET应用程序的配置文件(web.config)中,通过`&lt;system.web&gt;`标签下的`...

    Sql语句操作Excel文件

    例如,使用参数化查询防止SQL注入攻击,检查文件是否存在和是否可读,以及处理可能出现的异常情况。 总结来说,通过ASP.NET结合SQL语句,我们可以高效地对Excel文件进行数据操作,这在数据导入导出、临时数据存储等...

    sqlserver2000 上传图片保存二进制流

    - 考虑使用存储过程进行数据操作,提高安全性并减少SQL注入风险。 - 对于大量图片,考虑使用文件系统存储,只在数据库中存储文件路径,以减轻数据库负担。 通过上述步骤,你可以成功地在SQL Server 2000中保存和...

    基于asp.net+sql2000的校园点播系统

    5. **安全措施**:包括防止SQL注入、XSS攻击等,确保用户数据安全,避免系统遭受恶意攻击。 6. **报表与统计**:可能提供了课程设计报告,详细记录了系统的功能实现、设计思路、遇到的问题及解决方案,以及系统性能...

    ASP(net)小技巧.rar

    3. **ASP.NET(C#)防SQL注入**:SQL注入是一种常见的安全攻击,攻击者通过输入恶意的SQL代码,可能导致数据泄露、数据篡改甚至整个系统的瘫痪。防止SQL注入的关键在于使用参数化查询或存储过程,避免直接拼接用户输入...

    asp.net电子书城系统设计与实现(源代码+论文).zip

    安全性方面,系统应考虑防止SQL注入、XSS攻击等,通过验证和编码输入,以及使用参数化查询来保护数据安全。登录功能通常需要密码加密存储,防止信息泄露。 性能优化可能包括了缓存策略,如使用Output Cache减少页面...

    C#EF+MVC+Bootstrap建站通用后台管理系统源码数据库 SQL2008源码类型 WebForm

    EF+MVC+Bootstrap建站通用后台管理系统源码 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块、 日志模块、上传缩略图模块、通用配置...管道模块:通用HttpModule,用于注入通用功能到各个应用及网站

    网站访问统计系统ASP.NET

    需要遵循最佳实践,如加密存储敏感信息,防止SQL注入和跨站脚本攻击(XSS)。 7. 性能优化:由于统计系统可能会处理大量的并发请求,因此要考虑性能优化,如缓存策略、数据库索引优化以及使用异步处理来提高响应...

    ASP.NET教务信息管理系统的设计与实现(源代码)

    系统应考虑安全措施,防止SQL注入、跨站脚本攻击等,利用ASP.NET的内置防护机制,如参数化查询、输入验证和HTTPS加密通信。 8. 性能优化: 通过缓存策略、减少数据库交互、异步操作等手段提高系统性能。ASP.NET...

    网上商店系统 Beta版源码

    登录验证、权限控制、防止SQL注入等措施也是必不可少的,这需要开发者具备扎实的安全编程知识。 总的来说,这个网上商店系统 Beta版源码是一个很好的学习资源,它涵盖了ASP.NET 2.0的Web开发基础,SQL Server 2005...

    基于ASP.NET的眼镜网上销售网站-毕业设计实现+源码.rar

    8. 安全性:项目可能考虑了SQL注入、XSS攻击等安全问题,通过参数化查询、输入验证等方式提高安全性。 9. 错误处理和日志记录:ASP.NET提供错误处理机制,可以捕获并记录异常,帮助开发者调试和优化代码。 10. ...

    ASP.NET源码——[论坛社区]中国技术论坛(仿Discuz).zip

    安全方面,要注意SQL注入、XSS跨站脚本攻击、CSRF跨站请求伪造等风险,通过参数化查询、验证输入、使用HTTPS等方式加强防护。 通过深入分析和研究这个仿Discuz的中国技术论坛源码,开发者不仅能提升对ASP.NET的理解...

    基于三层架构的ASP.NET 项目实战教程.rar

    7. **安全性与性能优化**:教程还会涉及如何保护应用程序不受攻击,如防止SQL注入和跨站脚本(XSS),以及如何通过缓存、异步处理和优化数据库查询来提高性能。 8. **部署与持续集成**:最后,开发者会学习如何将...

    ASP.NET源码——[博客空间]LevenBlog 2.0.8.zip

    9. **安全防护**:考虑到网络安全,LevenBlog可能集成了防止SQL注入、XSS攻击等安全措施,这些是ASP.NET提供的一系列安全类库和最佳实践。 10. **错误处理与日志记录**:为了调试和维护,LevenBlog会包含错误处理...

    ASP.NET源码——[论坛社区]动网论坛.Net.zip

    安全性是任何Web应用的重点,动网论坛.Net可能包含了防止SQL注入、XSS攻击等安全措施。通过分析源码,我们可以了解如何在ASP.NET中实现这些防护机制。 通过对动网论坛.Net的源码深入研究,开发者不仅可以提升ASP...

    ASP.NET源码——[聊天留言]AJAX的高效聊天室源码.zip

    6. **安全性与性能优化**:源码可能包含了防止跨站脚本攻击(XSS)、SQL注入的安全措施,以及缓存策略、数据压缩等性能优化手段。 7. **用户认证与授权**:确保只有合法用户能访问和参与聊天,可能涉及到ASP.NET的...

    .net 面试题 大全

    - SQL注入是通过输入恶意SQL代码,欺骗数据库执行非预期操作。防止方法包括:使用参数化查询,输入验证,数据层和业务层分离,以及使用ORM框架等。 12. **Dataset保存表结构**: - Dataset通过内部的XML序列化...

Global site tag (gtag.js) - Google Analytics