网站安全通用防护代码(用户读写数据库对用户输入或者发送(Post、Get)数据等进行检测过滤等)

每一个开发者都会意识到,网站发布之前,需要进行安全及系统漏洞检查。

那么如何拦截攻击者注入恶意脚本或代码?如何防御诸如跨站脚本攻击(XSS)、SQL注入攻击等恶意攻击行为?

针对目前常见的一些安全问题,结合目前一些常见的防护办法,可在系统底层增加了安全防护代码。

[Description("网站安全通用防护代码(用户读写数据库对用户输入或者发送(Post、Get)数据等进行检测过滤等),跨站脚本攻击(XSS)、SQL注入攻击等恶意攻击")]
    public partial class SafeUtils
    {

        //正则过滤字符
        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)";

        /// <summary>
        ///  POST请求
        /// </summary>
        /// <param name="putData">输出非法字符串</param>
        /// <returns></returns>
        public static bool PostData(out string putData)
        {
            bool result = false;
            putData = string.Empty;
            for (int i = 0; i < HttpContext.Current.Request.Form.Count; i++)
            {
                result = CheckData(HttpContext.Current.Request.Form[i].ToString(), out putData);
                if (result)
                {
                    putData = HttpContext.Current.Request.Form[i].ToString();
                    break;
                }
            }
            return result;
        }

        /// <summary>
        /// GET请求
        /// </summary>
        /// <param name="putData">输出非法字符串</param>
        /// <returns></returns>
        public static bool GetData(out string putData)
        {
            bool result = false;
            putData = string.Empty;
            for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i++)
            {
                result = CheckData(HttpContext.Current.Request.QueryString[i].ToString(), out putData);
                if (result)
                {
                    putData = HttpContext.Current.Request.QueryString[i].ToString();
                    break;
                }
            }
            return result;
        }

        /// <summary>
        /// COOKIE数据
        /// </summary>
        /// <param name="putData">输出非法字符串</param>
        /// <returns></returns>
        public static bool CookieData(out string putData)
        {
            bool result = false;
            putData = string.Empty;
            for (int i = 0; i < HttpContext.Current.Request.Cookies.Count; i++)
            {
                result = CheckData(HttpContext.Current.Request.Cookies[i].Value.ToLower(), out putData);
                if (result)
                {
                    putData = HttpContext.Current.Request.Cookies[i].Value.ToLower();
                    break;
                }
            }
            return result;

        }

        /// <summary>
        /// UrlReferrer请求来源
        /// </summary>
        /// <param name="putData">输出非法字符串</param>
        /// <returns></returns>
        public static bool Referer(out string putData)
        {
            bool result = false;
            result = CheckData(HttpContext.Current.Request.UrlReferrer.ToString(), out putData);
            if (result)
            {
                putData = HttpContext.Current.Request.UrlReferrer.ToString();
            }
            return result;
        }

        /// <summary>
        /// 正则检查
        /// </summary>
        /// <param name="inputData">字符串</param>
        /// <param name="putData">输出非法字符串</param>
        /// <returns></returns>
        public static bool CheckData(string inputData, out string putData)
        {
            putData = string.Empty;
            //if (Regex.IsMatch(inputData.ToUpper(), StrRegex.ToUpper(),RegexOptions.IgnoreCase))
            if (Regex.IsMatch(inputData, StrRegex, RegexOptions.IgnoreCase))  //忽略大小写
            {
                putData = inputData;
                return true;
            }
            else
            {
                return false;
            }
        }

    }

原文地址:https://www.cnblogs.com/sharing1986687846/p/10281676.html

时间: 2024-08-14 07:30:38

网站安全通用防护代码(用户读写数据库对用户输入或者发送(Post、Get)数据等进行检测过滤等)的相关文章

网站安全通用防护代码(C#版本源码提供)

每一个开发者都会意识到,网站发布之前,需要进行安全检查. 那么如何拦截攻击者注入恶意代码?如何防御诸如跨站脚本攻击(XSS).SQL注入攻击等恶意攻击行为? 针对目前常见的一些安全问题,结合目前一些常见的防护办法,通用权限管理系统底层增加了安全防护代码, 现将源码提供如下 namespace DotNet.Utilities { /// <summary> /// 网站安全通用防护 /// /// 主要功能: /// 拦截攻击者注入恶意代码,可以防御诸如跨站脚本攻击(XSS).SQL注入攻击等

mongodb创建超级用户和普通用户(对应数据库的用户)

1.创建管理员,下面以用户test1为例: use admin db.createUser({user: "test1", pwd: "test1", roles: [{role: "root", db: "admin"}]}) 2.创建test2db对应的test2用户: use test2db db.createUser({user: "test2", pwd: "test2", r

oracle创建数据库和用户

以前开发的时候用得比较多的是mysql和sql server,oracle用的比较少,用起来比较生疏,mysql和sql server用起来比较类似,就oracle的使用方式和他们不同,oracle在创建数据库的时候要对应一个用户,数据库和用户一般一一对应,mysql和sql server 直接通过create databse “数据库名” 就可以直接创建数据库了,而oracle创建一个数据库需要以下三个步骤: 创建两个数据库的文件 创建用户与上面创建的文件形成映射关系 给用户添加权限 一.创建

Delphi通过ADO读写数据库

ADO是一种程序对象,用于表示用户数据库中的数据结构和所包含的数据. ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的应用程序接口(API)用以实现访问关系或非关系数据库中的数据.例如,如果您希望编写应用程序从DB2或Oracle数据库中向网页提供数据,可以将ADO程序包括在作为活动服务器页(ASP)的HTML文件中.当用户从网站请求网页时,返回的网页也包括了数据中的相应数据,这些是由于使用了ADO代码的结果. 在Delphi 5.0 以上的

C#基础视频教程6.2 如何简单读写数据库

上一节我们简单介绍了数据库的读写,所使用的数据库都是随便写的(用水果代替,但不是真正的食品零售数据表,至少没有价格,销量等等).这一节我们思考如何实现一个测试题的数据库,所谓的测试题数据库就是假定系统里预存了1000道题目,每个学生考试随机抽查50题,以保证每次考试很难相互抄袭,而且每个题目设置时间限制,到时间不作答就认为放弃,考试完成自动阅卷等等,这些功能都是普通的纸质考试没法实现的. ? 那么首先就是数据库的设计,能够想到的试题至少包含下面的信息(题目的参考答案和当前答案是一个很难讲的问题,

网站系统安全防护体系建设方案

目录 一.需求说明... 2 二.网页防篡改解决方案... 4 2.1 技术原理... 4 2.2 部署结构... 5 2.3 系统组成... 6 2.4 集群与允余部署... 8 2.5 方案特点... 9 2.5.1 篡改检测和恢复... 9 2.5.2 自动发布和同步... 9 三.WEB应用防护解决方案... 11 3.1 当前安全风险分析... 11 3.2 防护计划... 12 3.2.1 开发流程中加入安全性验证项目... 12 3.2.2 对网站程序的源代码进行弱点检测... 1

mongodb3.0分片及java代码连接操作测试(开启用户验证)

最近抽时间搭建了一下mongodb简单的分片,整个过程还算是蛮顺利,只不过在用户验证这一块遇到了一些问题,好在最后终于搞定. 一.服务器搭建过程: 1.安装四个mongodb:一个作为config.一个作为mongos.另外两个作为主要数据存储的服务器(机器ip192.168.0.201),如图: 分别对应图中被红框框起来的mongoconf.mongos.mongo1.mongo2(解压安装,安装过程省略). 2.分别建立data.conf.logs文件夹,并在logs文件夹下建立mongod

ASP.net中网站访问量统计方法代码(在线人数,本月访问,本日访问,访问流量,累计访问)

一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间 (IP_DateTime),些表的信息本人只保存一天的信息,如果要统计每个月的信息则要保存一个月.因为我不太懂对数据日志的操作,所以创建此表,所 以说我笨吧,哈哈. 二.在Global.asax中获取用户信息 在Global.asax的Session_Start即新会话启用时获取有关的信息,同时在这里实现在线人数.访问总人数的增量统计

对SD卡的读写操作-保存用户登录密码

import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import android.content.Context; import android.os.Environment; public class Fileservice { /** * 存储用