网站跨站点脚本,Sql注入等攻击的处理

从360安全论坛里找到的一段代码,经过整理封装,直接在站点Global.asax文件或写一个HttpModule来拦截恶意请求即可;

http://bbs.webscan.360.cn/forum.php?mod=viewthread&tid=711&page=1&extra=#pid1927 

using System.Text.RegularExpressions;
using System.Web;

/// <summary>
/// Web请求安全检查:防止跨站点脚本,Sql注入等攻击,来自:http://bbs.webscan.360.cn/forum.php?mod=viewthread&tid=711&page=1&extra=#pid1927
/// 检查数据包括:
/// 1.Cookie
/// 2.当前页面地址
/// 3.ReferrerUrl
/// 4.Post数据
/// 5.Get数据
/// </summary>
public class Safe360
{
    #region 执行安全检查

    /// <summary>
    /// 执行安全检查
    /// </summary>
    public static void Procress()
    {
        const string errmsg =
            "<div style='position:fixed;top:0px;width:100%;height:100%;background-color:white;color:green;font-weight:bold;border-bottom:5px solid #999;'><br>您的提交带有不合法参数,谢谢合作!<br><br>了解更多请点击:<a href='http://webscan.360.cn'>360网站安全检测</a></div>";

        if (RawUrl())
        {
            HttpContext.Current.Response.Write(errmsg);
            HttpContext.Current.Response.End();
        }

        if (CookieData())
        {
            HttpContext.Current.Response.Write(errmsg);
            HttpContext.Current.Response.End();
        }

        if (HttpContext.Current.Request.UrlReferrer != null)
        {
            if (Referer())
            {
                HttpContext.Current.Response.Write(errmsg);
                HttpContext.Current.Response.End();
            }
        }

        if (HttpContext.Current.Request.RequestType.ToUpper() == "POST")
        {
            if (PostData())
            {
                HttpContext.Current.Response.Write(errmsg);
                HttpContext.Current.Response.End();
            }
        }
        if (HttpContext.Current.Request.RequestType.ToUpper() == "GET")
        {
            if (GetData())
            {
                HttpContext.Current.Response.Write(errmsg);
                HttpContext.Current.Response.End();
            }
        }
    }

    #endregion

    #region 安全检查正则

    /// <summary>
    /// 安全检查正则
    /// </summary>
    private const string StrRegex =
        @"<[^>]+?style=[\w]+?:expression\(|\b(alert|confirm|prompt)\b|^\+/v(8|9)|<[^>]*?=[^>]*?&#[^>]*?>|\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|/\*.+?\*/|<\s*script\b|<\s*img\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)";

    #endregion

    #region 检查Post数据

    /// <summary>
    /// 检查Post数据
    /// </summary>
    /// <returns></returns>
    private static bool PostData()
    {
        bool result = false;

        for (int i = 0; i < HttpContext.Current.Request.Form.Count; i++)
        {
            result = CheckData(HttpContext.Current.Request.Form[i]);
            if (result)
            {
                break;
            }
        }
        return result;
    }

    #endregion

    #region 检查Get数据

    /// <summary>
    /// 检查Get数据
    /// </summary>
    /// <returns></returns>
    private static bool GetData()
    {
        bool result = false;

        for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i++)
        {
            result = CheckData(HttpContext.Current.Request.QueryString[i]);
            if (result)
            {
                break;
            }
        }
        return result;
    }

    #endregion

    #region 检查Cookie数据

    /// <summary>
    /// 检查Cookie数据
    /// </summary>
    /// <returns></returns>
    private static bool CookieData()
    {
        bool result = false;
        for (int i = 0; i < HttpContext.Current.Request.Cookies.Count; i++)
        {
            result = CheckData(HttpContext.Current.Request.Cookies[i].Value.ToLower());
            if (result)
            {
                break;
            }
        }
        return result;
    }

    #endregion

    #region 检查Referer

    /// <summary>
    /// 检查Referer
    /// </summary>
    /// <returns></returns>
    private static bool Referer()
    {
        return CheckData(HttpContext.Current.Request.UrlReferrer.ToString());
    }

    #endregion

    #region 检查当前请求路径

    /// <summary>
    /// 检查当前请求路径
    /// </summary>
    /// <returns></returns>
    private static bool RawUrl()
    {
        return CheckData(HttpContext.Current.Request.RawUrl);
    }

    #endregion

    #region 正则匹配

    /// <summary>
    /// 正则匹配
    /// </summary>
    /// <param name="inputData"></param>
    /// <returns></returns>
    private static bool CheckData(string inputData)
    {
        return Regex.IsMatch(inputData, StrRegex);
    }

    #endregion
}

在Global.asax里调用的代码:

    private void Application_BeginRequest(object sender, EventArgs e)
    {
        Safe360.Procress();

    }

时间: 2024-09-23 00:50:26

网站跨站点脚本,Sql注入等攻击的处理的相关文章

PHP代码网站防范SQL注入漏洞攻击的建议

所有的网站管理员都会关心网站的安全问题.说到安全就不得不说到SQL注入攻击(SQL Injection).黑客通过SQL注入攻击可以拿到网站数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入 功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉.做为网络开发者的你对这种黑客行为恨之入骨,当然也有必要了解一下SQL注入这种功能方式的原理并 学会如何通过代码来保护自己的网站数据库.今天就通过PHP和MySQL数据库为例,分享一下我所了解的SQL注入攻击和一些简单的

asp防范跨站点脚本攻击的的方法_应用技巧

防范跨站点脚本攻击的的方法 1.利用 空格 替换特殊字符 % < > { } ; & + - " ' ( ) 2.使用@,具体而言是将以下语句 exec="insert into user(username,psw,sex,department,phone,email,demo) values('"&username&"','"&psw&"','"&sex&"

PHP代码网站如何防范SQL注入漏洞攻击建议分享_php技巧

黑客通过SQL注入攻击可以拿到网站数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉.做为网络开发者的你对这种黑客行为恨之入骨,当然也有必要了解一下SQL注入这种功能方式的原理并学会如何通过代码来保护自己的网站数据库.今天就通过PHP和MySQL数据库为例,分享一下我所了解的SQL注入攻击和一些简单的防范措施和一些如何避免SQL注入攻击的建议. 什么是SQL注入(SQL Injection)? 简单来说,SQ

asp防范跨站点脚本攻击的的方法

防范跨站点脚本攻击的的方法 1.利用 空格 替换特殊字符 % < > { } ; & + - " ' ( ) 2.使用@,具体而言是将以下语句 exec="insert into user(username,psw,sex,department,phone,email,demo) values('"&username&"','"&psw&"','"&sex&"

使用SQLMAP对网站和数据库进行SQL注入攻击

from:http://www.blackmoreops.com/2014/05/07/use-sqlmap-sql-injection-hack-website-database/ 0x00 背景介绍 1. 什么是SQL注入? SQL注入是一种代码注入技术,过去常常用于攻击数据驱动性的应用,比如将恶意的SQL代码注入到特定字段用于实施拖库攻击等.SQL注入的成功必须借助应用程序的安全漏洞,例如用户输入没有经过正确地过滤(针对某些特定字符串)或者没有特别强调类型的时候,都容易造成异常地执行SQL

测试Web应用程序是否存在跨站点脚本漏洞

到目前为止,对于跨站点脚本攻击具有很大的威胁这一点大家并无异议.如果您很精通 XSS 并且只想看看有什么好的测试方法可供借鉴,那么请直接跳到本文的测试部分.如果您对此一无所知,请按顺序认真阅读!如果某个怀有恶意的人(攻击者)可以强迫某个不知情的用户(受害者)运行攻击者选择的客户端脚本,那么便会发生跨站点脚本攻击."跨站点脚本"这个词应该属于用词不当的情况,因为它不仅与脚本有关,而且它甚至不一定是跨站点的.所以,它就是一个在发现这种攻击时起的一个名字,并且一直沿用至今.从现在开始,我们将

漏洞 跨站点脚本编制

问题描述 漏洞 跨站点脚本编制 严重性: 高 测试类型: 应用程序 有漏洞的URL: http://xxxxxxxx/mzj_site/infoMain.do (参数 = img) 修复任务: 过滤掉用户输入中的危险字符 响应中的验证: ? frameborder="0" scrolling="no" src="/mzj_site/infoMain_left.do?img=-1">alertalert<br> (28635)(2

SQL注入法攻击一日通

随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根 据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入. SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志

SQL注入除攻击数据库外还威胁系统

近来的SQL注入攻击显示,采用SQL注入的多级攻击可以提供对操作系统的交互式GUI(图形用户界面)访问. 一位欧洲的研究人员发现,SQL注入并不仅仅是为了攻击数据库和网页,这场影响范围巨大的攻击风暴也可以作为进入操作系统的垫脚石. Portcullis计算机安全的高级渗透测试人员Alberto Revelli星期二在伦敦的EUSecWest大会上演示了一种多级攻击,它采用可以从根本上给攻击者对底层操作系统进行交互GUI方式的访问. Revelli 也被人们称为"icesurfer",他