在Global.asax文件里实现通用防SQL注入漏洞程序

首先,创建一个SQLInjectionHelper类完成恶意代码的检查

代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Text.RegularExpressions;

/// <summary>

///SQLInjectionHelper 的摘要说明

/// </summary>

public class SQLInjectionHelper

{

    /// <summary>

    /// 获取Post的数据

    /// </summary>

    /// <param name="request"></param>

    /// <returns></returns>

    public static bool ValidUrlData(string request)

    {

        bool result = false;

        if (request == "POST")

        {

            for (int i = 0; i < HttpContext.Current.Request.Form.Count; i++)

            {

                result = ValidData(HttpContext.Current.Request.Form[i].ToString());

                if (result)

                {

                    break;

                }

            }

        }

        else

        {

            for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i++)

            {

                result = ValidData(HttpContext.Current.Request.QueryString[i].ToString());

                if (result)

                {

                    break;

                }

            }

        }

        return result;

    }

    /// <summary>

    /// 验证是否存在注入代码

    /// </summary>

    /// <param name="inputData"></param>

    /// <returns></returns>

    private static bool ValidData(string inputData)

    {

        //验证inputData是否包含恶意集合

        if (Regex.IsMatch(inputData, GetRegexString()))

        {

            return true;

        }

        else

        {

            return false;

        }

    }

    /// <summary>

    /// 获取正则表达式

    /// </summary>

    /// <returns></returns>

    private static string GetRegexString()

    {

        //构造SQL的注入关键字符

        string[] strChar = { "and", "exec", "insert", "select", "update", "delete", "count", "from", "drop", "asc", "or", "char", "%", ";", ":", "\‘", "\"", "-", "chr", "master", "mid", "truncate", "declare", "char", "SiteName", "/add", "xp_cmdshell", "net user", "net localgroup administrators", "exec master.dbo.xp_cmdshell" };

        string str_Regex = ".*(";

        for (int i = 0; i < strChar.Length - 1; i++)

        {

            str_Regex += strChar[i] + "|";

        }

        str_Regex += strChar[strChar.Length - 1] + ").*";

        return str_Regex;

    }

}

  

有此类后即可使用Global.asax中的Application_BeginRequest(object sender, EventArgs e)事件来实现表单或者URL提交数据的获取,获取后传给SQLInjectionHelper类ValidUrlData方法来完成检查

代码如下

protected void Application_BeginRequest(object sender, EventArgs e)

    {

        bool result = false;

        result = SQLInjectionHelper.ValidUrlData(Request.RequestType.ToUpper());

        if (result)

        {

            Response.Write("您提交的数据有恶意字符");

            Response.End();

        }

    }

  

下面以一个小程序测试:

创建一个页面,如下

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

        <br />

        <asp:Button ID="btnPost" runat="server" Text="获取Post数据"

            onclick="btnPost_Click" />

    </div>

    <asp:Button ID="btnGet" runat="server" Text="获取Get数据" onclick="btnGet_Click" />

    </form>

</body>

</html>

  

分别添加单击事件,如下

protected void btnPost_Click(object sender, EventArgs e)

    {

    }

    protected void btnGet_Click(object sender, EventArgs e)

    {

        Response.Redirect("Default.aspx?a=1&b=2&c=3");

    }

  

在文本框中输入非法字符串,无论post请求还是get请求,都会被防SQL注入程序所截获

图1 测试防SQL注入程序的页面

图2 错误信息

时间: 2024-10-07 08:44:25

在Global.asax文件里实现通用防SQL注入漏洞程序的相关文章

通过Global.asax文件里面的Session_End事件记录用户退出 (or session timeout)

Session.Abandon()和timeout会触发Global.asax的Session_End事件.可以通过这个事件来记录用户退出或者session timeout,这样每个用户都会有一条登陆和退出记录. 退出登陆调用方法: public void PerformLogout() { HttpContext.Current.Session["PerformLogout"] = true; HttpContext.Current.Session.Abandon(); } Sess

Global.asax文件的说明

每个应用程序可以包含一个特殊的目录(/bin)和两个特殊的文件(Web.config和Global.asax) Global.asax文件的使用: 作用:处理应用程序范围内的事件,声明应用程序范围的对象 每个ASP.NET应用程序都支持特定数量的事件,以下是一些最重要的事件: Application_BeginRequest 每个发送服务器的请求引发该事件 Application_End 在应用程序的所有实例结束之前引发 Application_EndRequest 在每个发送服务器的请求结束之

Global.asax文件—ASP.NET细枝末节(1)

说明 Global的解释是全局的.全球的. Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务. Global.asax使用频率不是特别高,属于细枝末节的小知识点.不说了,来我们一起研究一下这个东西吧. 创建和预览 1.添加 同web.config一样,通常情况下Global.asax文件名是固定的.如果您没有非得要改名的理由,不建议您修改. 你改了,系统不懂了.(

ASP.NET MVC中的Global.asax文件

1.global.asax文件概述 global.asax这个文件包含全局应用程序事件的事件处理程序.它响应应用程序级别和会话级别事件的代码. 运行时, Global.asax 将被编译成一个动态生成的 .NET Framework 类,该类是从HttpApplication基类派生的. 因此在global.asax中的代码可以访问HttpApplication类中所有的public或者protected的成员global.asax不被用户直接请求,但global.asax中的代码会被自动执行来

c# .net Global.asax文件的作用

1 Global.asax文件的作用 先看看MSDN的解释,Global.asax 文件(也称为 ASP.NET 应用程序文件)是一个可选的文件,该文件包含响应 ASP.NET 或HTTP模块所引发的应用程序级别和会话级别事件的代码.Global.asax 文件驻留在 ASP.NET 应用程序的根目录中.运行时,分析 Global.asax 并将其编译到一个动态生成的 .NET Framework 类,该类是从HttpApplication基类派生的.配置 ASP.NET,以便自动拒绝对 Glo

Global.asax文件说明

Global.asax是我们的底层文件,第一次的IIS请求都会先去执行它里面的文件,所以学会它里面的函数是非常有必要的.而且我们总是忽略这里的知识点,总觉得这是不必须的,其实我们错了,这里才是程序的根本. 文件代码: /// <summary> /// 所有的应用,状态,程序被访问,用户退出,都可以找到., /// </summary> public class Global : System.Web.HttpApplication { /// <summary> //

ASP.NET中Global.asax 文件是什么

Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务.下面让我们详细看一下如何在应用程序开发工作中使用这个文件. 概述 Global.asax 位于应用程序根目录下.虽然 Visual Studio .NET 会自动插入这个文件到所有的 ASP.NET 项目中,但是它实际上是一个可选文件.删除它不会出问题——当然是在你没有使用它的情况下..asax 文件扩展名指出它是

【MVC框架】——Global.asax文件中的RegisterGlobalFilters()和RegisterRoutes()方法

最近在学习MVC框架时,发现新建MVC的项目,会自动创建一个Global.asax文件,它跟我们平时所看到的文件的文件后缀名不一样,而且在这个文件中也有好多方法.现在介绍一下其中的两个方法,RegisterGlobalFilters()和RegisterRoutes()方法. 什么是Global.asax文件 Global.asax文件是ASP.NET应用程序文件,提供了一中在一个中心位置响应应用程序级别和模块级别时间的方法,它位于应用程序根目录下,每个应用程序根目录下只能有一个该文件.虽然创建

Global.asax 文件是什么

Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务.下面让我们详细看一下如何在应用程序开发工作中使用这个文件. 概述 Global.asax 位于应用程序根目录下.虽然 Visual Studio .NET 会自动插入这个文件到所有的 ASP.NET 项目中,但是它实际上是一个可选文件.删除它不会出问题——当然是在你没有使用它的情况下..asax 文件扩展名指出它是