1、在Global.asax.cs中写入:

protected void Application_BeginRequest(Object sender,EventArgs e)
{
      SqlInject myCheck = new SqlInject(this.Request);

myCheck.CheckSqlInject();
}

 
2、新建一个SqlInject防注入类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace SC_LuceneNet
{
    public class SqlInject : System.Web.UI.Page
    {
        //检测到注入后的处理方式:   0:仅警告;1:警告+记录;2:警告+自定义错误页面;3:警告+记录+自定义错误页面
        private const int _type = 3;
        private const string errRedirectPage = "/err.aspx";

//过滤特征字符
        private const string StrKeyWord = @"select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec|master|net local group administrators|net user|or|and";
        private const string StrRegex = @"-|;|,|/|(|)|[|]|{|}|%|@|*|'|!";

private HttpRequest request;

public SqlInject(System.Web.HttpRequest _request)
        {
            this.request = _request;
        }

public void CheckSqlInject()
        {
            bool isInject = false;
            if (CheckRequestQuery() || CheckRequestForm())
            {
                isInject = true;
            }
            else
            {
                return;
            }

switch (_type)
            {
                case 0:
                    ShowErr();
                    break;
                case 1:
                    ShowErr();
                    break;
                case 2:
                    ShowErr();
                    string temp;
                    System.Web.HttpContext.Current.Response.Write("<script>setTimeout(\"" + "location.href='" + errRedirectPage + "'" + "\",5000)</script>");
                    break;
                case 3:
                    ShowErr();
                    System.Web.HttpContext.Current.Response.Write("<script>setTimeout(\"" + "location.href='" + errRedirectPage + "'" + "\",5000)</script>");
                    break;
                default:
                    break;
            }
            System.Web.HttpContext.Current.Response.End();

}
        private string RelaceSingleQuotes(string _url)
        {
            string URL = _url.Replace("'", "单引号");
            return URL;
        }
        private void ShowErr()
        {
            string msg = @"<font color=red>请不要尝试未授权之入侵检测!</font>" + @"<br><br>";
            msg += @"操作IP:" + request.ServerVariables["REMOTE_ADDR"] + @"<br>";
            msg += @"操作时间:" + DateTime.Now + @"<br>";
            msg += @"页面:" + request.ServerVariables["URL"].ToLower() + request.QueryString.ToString() + @"<br>";
            msg += @"<a href='err.aspx' onclick='javascript:window.close()'>关闭</a>";
            System.Web.HttpContext.Current.Response.Clear();
            System.Web.HttpContext.Current.Response.Write(msg);
        }
        ///<summary>
        /// 特征字符
        ///</summary>
        public static string KeyWord
        {
            get
            {
                return StrKeyWord;
            }
        }
        ///<summary>
        /// 特征符号
        ///</summary>
        public static string RegexString
        {
            get
            {
                return StrRegex;
            }
        }

///<summary>
        ///检查字符串中是否包含Sql注入关键字
        /// <param name="_key">被检查的字符串</param>
        /// <returns>如果包含注入true;否则返回false</returns>
        ///</summary>
        private static bool CheckKeyWord(string _key)
        {
            string[] pattenString = StrKeyWord.Split('|');
            string[] pattenRegex = StrRegex.Split('|');
            foreach (string sqlParam in pattenString)
            {
                if (_key.Contains(sqlParam + " ") || _key.Contains(" " + sqlParam))
                {
                    return true;
                }
            }
            foreach (string sqlParam in pattenRegex)
            {
                if (_key.Contains(sqlParam))
                {
                    return true;
                }
            }
            return false;

}
        ///<summary>
        ///检查URL中是否包含Sql注入
        /// <param name="_request">当前HttpRequest对象</param>
        /// <returns>如果包含注入true;否则返回false</returns>
        ///</summary>
        public bool CheckRequestQuery()
        {
            if (request.QueryString.Count > 0)
            {
                foreach (string sqlParam in this.request.QueryString)
                {
                    if (sqlParam == "__VIEWSTATE") continue;
                    if (sqlParam == "__EVENTVALIDATION") continue;
                    if (CheckKeyWord(request.QueryString[sqlParam].ToLower()))
                    {
                        return true;
                    }
                }
            }
            return false;
        }
        ///<summary>
        ///检查提交的表单中是否包含Sql注入
        /// <param name="_request">当前HttpRequest对象</param>
        /// <returns>如果包含注入true;否则返回false</returns>
        ///</summary>
        public bool CheckRequestForm()
        {
            if (request.Form.Count > 0)
            {
                foreach (string sqlParam in this.request.Form)
                {
                    if (sqlParam == "__VIEWSTATE") continue;
                    if (sqlParam == "__EVENTVALIDATION") continue;
                    if (CheckKeyWord(request.Form[sqlParam]))
                    {
                        return true;
                    }
                }
            }
            return false;
        }

}
}

 
3、新建err.aspx错误文件:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="err.aspx.cs" Inherits="SC_LuceneNet.err" %>

<!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>
    <script type='text/javascript'>
         if (confirm('是否重新登陆~~~~~~')) {
             location = "login.aspx";
         }
    </script>
</body>
</html>

SQL防注入程序的更多相关文章

  1. SQL防注入程序 v1.0

    /// ***************C#版SQL防注入程序 v1.0************ /// *使用方法: /// 一.整站防注入(推荐) /// 在Global.asax.cs中查找App ...

  2. sql 防注入 维基百科

    http://zh.wikipedia.org/wiki/SQL%E8%B3%87%E6%96%99%E9%9A%B1%E7%A2%BC%E6%94%BB%E6%93%8A SQL攻击(SQL inj ...

  3. PHP之SQL防注入代码集合(建站常用)

    SQL防注入代码一 <?php if (!function_exists (quote)) { function quote($var) { if (strlen($var)) { $var=! ...

  4. php之防注入程序绕过浅谈

    <?php/*判断传递的变量是否含有非法字符如:$_POST/$_GET功能:SQL防注入系统*/ //屏蔽错误提示error_reporting(7); //需要过滤的字符 $ArrFiltr ...

  5. 特殊字符的过滤方法,防sql防注入代码的过滤方法

    特殊字符的过滤方法 function strFilter($str){ //特殊字符的过滤方法 $str = str_replace('`', '', $str); $str = str_replac ...

  6. PHP SQL防注入

    过年前后在做一个抽奖的东西,需要用户填写中奖信息,为了防止非法用户对数据库进行入侵神马的,于是写下基本的防注入语句,需要用的可以自己封装成一个function. $str = str_replace( ...

  7. PHP安全、Sql防注入安全汇总

    利用Mysqli和PDO 产生原因 主要就是一些数据没有经过严格的验证,然后直接拼接 SQL 去查询.导致漏洞产生,比如: $id = $_GET['id']; $sql = "SELECT ...

  8. 360提供的SQL防注入

    <?php class sqlsafe { private $getfilter = "'|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\ ...

  9. .net sql 防注入 httpmodule

    1 新建一个类,实现IHttpModule接口 using System; using System.Collections.Generic; using System.Linq; using Sys ...

随机推荐

  1. Oracle 组织架构(转)

    原文地址:Oracle 组织架构 我们先来看一下实际生活中的集团组织架构. 下图是一个典型的投资集团组织架构. 集团在各个国家有独立的法人. 每个法人会负责若干个业务进行,比如石油开采,汽车制造,软件 ...

  2. 《认识你自己(Archetypes who are you?)》 10种原型的行为模式和性格特征

    转自:http://www.cnblogs.com/richardcuick/p/5627298.html 拥护型原型   你自然而然地就会被社会.政治和环境问题所吸引. 你认为世界需要改变. 你承诺 ...

  3. JS案例之4——Ajax多图上传

    近期项目中有好几次用到多图上传,第一次在项目中真正用到Ajax技术,稍微整理了下,贴个案例出来. 我们传统的做法是当用户提交一个表单时,就向web服务器端发送一个请求.服务器接受并处理传来的表单信息, ...

  4. java方法重载 与 重写

    class ChongZai{ public void a(int a); public void a(Strting a); public void a(int a,int b); } 如上就是一个 ...

  5. LeetCode Question Difficulty Distribution

    参考链接:https://docs.google.com/spreadsheet/pub?key=0Aqt--%20wSNYfuxdGxQWVFsOGdVVWxQRlNUVXZTdEpOeEE& ...

  6. Scala学习笔记(六):Scala程序

    想要编写能够独立运行的Scala程序,就必须创建有main方法(仅带一个参数Array[String],且结果类型为Unit)的单例对象. 任何拥有合适签名的main方法的单例对象都可以用来作为程序的 ...

  7. Javascript日期时间总结

    写这篇文章,总结一下前端JavaScript遇到的时间格式处理. 1 C#时间戳处理 从后台返回的C#时间为:/Date(-62135596800000)/,这个是C#的DateTime.MinVal ...

  8. 迅雷首席架构师刘智聪:微信小程序的架构与系统设计的几点观感

    笔者注:本文来自于迅雷首席工程师刘智聪的个人分享,他毕业于南昌大学化学系,加入迅雷后设计开发了多款迅雷核心产品,凭借“大规模网络流媒体服务关键支撑技术”项目获得2015年国家科学技术进步奖二等奖,同时 ...

  9. [USACO2005][POJ3044]City Skyline(贪心+单调栈)

    题目:http://poj.org/problem?id=3044 题意:以坐标的形式给出一张图,表示一些楼房的正视图,求出楼房的最少个数. 分析:和小学常做的立方体问题很像,很容易想到一个贪心方法, ...

  10. Coding the Matrix (2):向量空间

    1. 线性组合 概念很简单: 当然,这里向量前面的系数都是标量. 2. Span 向量v1,v2,.... ,vn的所有线性组合构成的集合,称为v1,v2,... ,vn的张成(span).向量v1, ...