日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

網(wǎng)站安全通用防護代碼(C#版本源碼提供)

admin
2018年9月8日 18:57 本文熱度 6548

每一個開發(fā)者都會意識到,網(wǎng)站發(fā)布之前,需要進行安全檢查。

那么如何攔截攻擊者注入惡意代碼?如何防御諸如跨站腳本攻擊(XSS)、SQL注入攻擊等惡意攻擊行為?

針對目前常見的一些安全問題,結(jié)合目前一些常見的防護辦法,通用權(quán)限管理系統(tǒng)底層增加了安全防護代碼,

現(xiàn)將源碼提供如下

namespace DotNet.Utilities
{
    /// <summary>
    /// 網(wǎng)站安全通用防護
    ///
    /// 主要功能:
    ///          攔截攻擊者注入惡意代碼,可以防御諸如跨站腳本攻擊(XSS)、SQL注入攻擊等惡意攻擊行為。
    ///
    /// 修改紀錄
    ///
    /// 2013-12-27,更新正則表達式避免誤報問題。
    /// 2013-01-08,更新了aspx防護腳本中referer變量沖突問題。
    /// 2013-01-09,加入了UTF7編碼XSS的防護。
    /// 2013-01-28,增強了對XSS的防護。
    /// 2013-01-31,針對某些用戶后臺上傳文件出錯的問題。
    /// 2013-03-15,增強了對POST的防護。
    /// 2013-03-28,增強了對XSS的防護。
    /// 2013-04-25,對XSS防護加入了通用的防護方法。
    /// 2013-08-02,加入對XSS編碼繞過的防護。
    /// 2013-08-14,增強利用樣式的XSS防護。
    /// 2014-11-12,解決SQL盲注不攔截的問題。
    ///
    /// 2014-11-12 版本:1.0 SongBiao 創(chuàng)建文件。  
    ///
    /// <author>
    ///     <name>SongBiao</name>
    ///     <date>2014-11-12</date>
    /// </author>
    /// </summary>
    public partial class SecretUtil
    {
        //正則過濾字符
        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;
            }
        }
    }
}

源碼在通用權(quán)限底層中的位置:


調(diào)用方法:(ASP.NET MVC參考)在Global.asax文件中增加以下方法
/// <summary>
        /// 在此處進行安全檢測和防范
        /// Application_BeginRequest
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Application_AcquireRequestState(object sender, EventArgs e)
        {
            HttpContext context = HttpContext.Current;
            string putData = string.Empty;
            if (Request.Cookies != null)
            {
                if (SecretUtil.CookieData(out putData))
                {
                    ResponseWarnMessage(context, "Cookie數(shù)據(jù)有惡意字符!", putData);
                }
            }
            if (Request.UrlReferrer != null)
            {
                if (SecretUtil.Referer(out putData))
                {
                    ResponseWarnMessage(context, "Referrer數(shù)據(jù)有惡意字符!", putData);
                }
            }
            if (Request.RequestType.ToUpper() == "POST")
            {
                if (SecretUtil.PostData(out putData))
                {
                    ResponseWarnMessage(context, "Post數(shù)據(jù)有惡意字符!", putData);
                }
            }
            if (Request.RequestType.ToUpper() == "GET")
            {
                if (SecretUtil.GetData(out putData))
                {
                    ResponseWarnMessage(context, "Get數(shù)據(jù)有惡意字符!", putData);
                }
            }
        }
        /// <summary>
        /// 非安全行為 輸出警告信息
        /// </summary>
        /// <param name="errorMessage"></param>
        /// <param name="putData"></param>
        private void ResponseWarnMessage(HttpContext context, string errorMessage, string putData)
        {
            //記錄一下惡意攻擊行為
            string ipAddress = Utilities.GetIPAddress(true);
            BaseUserInfo userInfo = context.Session[DotNet.Business.Utilities.SessionName] as BaseUserInfo;
            //非安全行為同時記錄到數(shù)據(jù)庫和文本文件中
            LogHelper.OracleWarn(userInfo, "惡意訪問行為", "來自IP:" + ipAddress + "的訪問存在惡意行為:" + errorMessage + "字符內(nèi)容:" + putData, " private void ResponseErrorMessage(string errorMessage, string putData)", typeof(MvcApplication), null);
            RouteData routeData = new RouteData();
            routeData.Values.Add("controller", "Error");
            routeData.Values.Add("action", "General");
            routeData.Values.Add("title", "非法訪問與請求提醒");
            routeData.Values.Add("error", "你提交的" + errorMessage + "字符內(nèi)容:" + putData);
            IController errorController = new ErrorController();
            errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
            context.Response.End();
        }

上面的處理方法可根據(jù)需要自己調(diào)整,我是將攻擊信息使用系統(tǒng)的日志功能記錄到Oracle數(shù)據(jù)庫中,并在頁面顯示攻擊信息,

測試:在地址后加入"?action=delete from user"

以上安全代碼也可單獨放到你的程序中使用,建議尚未做安全防護的朋友盡快加上,避免受到一些常見的攻擊行為騷擾。

該文章在 2018/9/8 18:57:19 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 人人色在线视频播放 | 亚洲综合一区二区三区人妖 | 好看的韩国电影 | 国产在线观看青草视频 | 妺妺窝人体色www在线观看 | 黄一色片一网站一 | 制服丝袜欧美中文 | 日本一区二区成人教育 | 三年片在线观看免费播放大全电影 | 999在线观看国产 | 欧美一级| 日本阿v高清不卡在线 | 天天色影综 | 桃色一区二区三区 | 韩国三级 | 一个人免费观看视频www | 国产精选在线观 | 一区二区三区高清视频一 | 国产h片在线观看 | а√最新版天堂资源在线 | 自在自线视频香蕉 | 国产精品一区二区久 | 亚洲欧美国产国产一区二区三区 | 99精品欧美 | 九操中文字幕在线观看 | 国产精品私密保养 | 在线观看成人影院 | 污污污国| 一区②区三区电影网 | 一道久在 | 中文字幕影片免费在线观看 | 欧美日韩日本中国高清视频在线 | 午夜福利门事件国产在线 | 五月激情丁香婷婷综合网 | 国产人妖兮 | 亚洲愉拍自拍欧美精品app | 日本视频 | 97人人超人人超国产免费 | 国产高清片 | 欧美精品亚洲精品日韩专区v | 午夜成人免费y在线观看 |