C# 安全帮助类

本文介绍了一个用于检查HTTP请求中潜在危险字符的安全类实现。该类通过正则表达式匹配恶意输入,如SQL注入、XSS攻击等,并记录非法提交尝试。

   /// <summary>
   /// 安全类
   /// </summary>
    public class SafeCommon
    {
        private static string StrRegex = @"<[^>]+?style=[\w]+?:expression\(|\b(alert|confirm|prompt|onmouseover|onmouseout)\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)";

        private static bool CheckData(string inputData)
        {
            if (Regex.IsMatch(inputData.ToLower(), StrRegex))
            {
                return true;
            }
            else
            {
                return false;
            }
        }


        #region 检查危险字符

        /// <summary>
        /// 检查危险字符
        /// </summary>
        /// <param name="sInput"></param>
        /// <returns></returns>
        public static bool IsSafeString(Microsoft.AspNetCore.Http.HttpContext context,string sInput)
        {
            bool b = CheckData(sInput);
            if (b)
            {
                
                string url = context.Request.Scheme + "://" + context.Request.Host + context.Request.PathBase + context.Request.Path + context.Request.QueryString;
                string ip = context.Request.HttpContext.Connection.RemoteIpAddress+":"+context.Request.HttpContext.Connection.RemotePort;
                string type = context.Request.Method;
                string postParam = "";
                if (context.Request.Method.ToLower().Equals("post"))
                {
                    foreach (var key in context.Request.Form.Keys.ToList())
                    {
                        postParam = postParam + "{\"key\":\""+key+"\",\"value\":\""+ context.Request.Form["key"] + "\"},";
                    }
                    postParam = postParam.Trim(',');
                    postParam = "[" + postParam + "]";
                }
                string msg = string.Format("\r\n 请勿非法提交,提交数据中有非法字符!\r\n 攻击时间是:{0}\r\n 被攻击URL是:{1}\r\n 攻击者的IP是:{2}\r\n 请求方式是{3}\r\n POST参数是{4}\r\n", System.DateTime.Now.ToString(), url, ip,type,postParam);

                string path = string.Format("{0}/log/safe", AppContext.BaseDirectory);
                string fileName =path+"/"+System.DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
                DirFile.DirFileSheep.CreateDirectory(path);
                DirFile.DirFileSheep.CreateFile(fileName);
                DirFile.DirFileSheep.AppendText(fileName, msg);
                throw new Exception("请勿非法提交,提交数据中有非法字符!");
            }
            return b;
        }
        #endregion
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值