zoukankan      html  css  js  c++  java
  • 通过Global.asax 防范 SQL 注入( injection)

    先看一下MSDN对Global.asax的解释:

    Global.asax 文件(也称为 ASP.NET 应用程序文件)是一个可选的文件,该文件包含响应 ASP.NET 或 HTTP 模块所引发的应用程序级别和会话级别事件的代码。Global.asax 文件驻留在 ASP.NET 应用程序的根目录中。运行时,分析 Global.asax 并将其编译到一个动态生成的 .NET Framework 类,该类是从 HttpApplication 基类派生的。配置 ASP.NET,以便自动拒绝对 Global.asax 文件的任何直接的 URL 请求;外部用户不能下载或查看其中的代码。

    所以防范SQL注入我们可以通过Global.asax入手,因为所有请求都要先执行这个文件的相关方法。

    以下是通过Global.asax防范SQL注入的示例代码:


    <%@ Application Language="C#" %>

    <script runat="server">
        
    void Application_BeginRequest(object source, EventArgs e)
        {
            StartProcessRequest();
        }
        #region SQL注入式攻击代码防范
        
    /// 
        
    /// 处理用户提交的请求
        /// 
        private void StartProcessRequest()
        {
            try
            {
                string getkeys = "";
                string sqlErrorPage = "http://www.cqun.com";
                if (System.Web.HttpContext.Current.Request.QueryString != null)
                {

                    for (int i = 0; i < System.Web.HttpContext.Current.Request.QueryString.Count; i++)
                    {
                        getkeys = System.Web.HttpContext.Current.Request.QueryString.Keys[i];
                        if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys].ToLower()))
                        {
                            System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage);
                            System.Web.HttpContext.Current.Response.End();
                        }
                    }
                }

                if (System.Web.HttpContext.Current.Request.Form != null)
                {
                    for(int i=0;i<System.Web.HttpContext.Current.Request.Form.Count;i++)
                    {
                        getkeys = System.Web.HttpContext.Current.Request.Form.Keys[i];
                        if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys].ToLower()))
                        {
                            System.Web.HttpContext.Current.Response.Redirect (sqlErrorPage);
                            System.Web.HttpContext.Current.Response.End();
                        }
                    }
                }

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

        /// 
        
    /// 分析用户请求是否正常
        /// 
        
    /// 传入用户提交数据
        
    /// 返回是否含有SQL注入式攻击代码
        private bool ProcessSqlStr(string Str)
        {
            bool ReturnValue = true;
            try
            {
                if (Str != "" && Str != null)
                {
                    string SqlStr = "";
                    if (SqlStr == "" || SqlStr == null)
                    {
                        SqlStr = "'|exec|insert|delete|update|chr|mid|master|truncate|char|declare";
                    }
                    string[] anySqlStr = SqlStr.Split('|');
                    foreach (string ss in anySqlStr)
                    {
                        if (Str.IndexOf(ss) >= 0)
                        {
                            ReturnValue = false;
                        }
                    }
                }
            }
            catch
            {
                ReturnValue = false;
            }
            return ReturnValue;
        }
        #endregion
    </script>
  • 相关阅读:
    The Future of Middleware and the BizTalk Roadmap
    FW: How to spawn a process that runs under the context of the impersonated user in Microsoft ASP.NET pages
    Strips illegal Xml characters
    luogu P2280 激光炸弹(二维前缀和)
    luogu P2704 炮兵阵地(经典状态压缩DP)
    SP1716 GSS3 Can you answer these queries III (线段树维护最大连续子段和)
    二分图判定、匹配问题
    C++语法综合 | 基于char*设计一个字符串类MyString
    luogu P1044 火车进出栈问题(Catalan数)
    C++设计模式 | 三种设计模式基础
  • 原文地址:https://www.cnblogs.com/top5/p/1584283.html
Copyright © 2011-2022 走看看