国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

.Net 全局過濾,防止SQL注入

這篇具有很好參考價(jià)值的文章主要介紹了.Net 全局過濾,防止SQL注入。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

問題背景:由于公司需要整改的老系統(tǒng)的漏洞檢查,而系統(tǒng)就是沒有使用參數(shù)化SQL即拼接查詢語句開發(fā)的程序,導(dǎo)致漏洞掃描出現(xiàn)大量SQL注入問題。

解決方法:最好的辦法就是不寫拼接SQL,改用參數(shù)化SQL,推薦新項(xiàng)目使用,老項(xiàng)目改起來比較麻煩,花費(fèi)的時(shí)間也多,最后選擇用全局SQL過濾器過濾前端發(fā)送的請(qǐng)求內(nèi)容。

代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-801605.html

/// <summary>
    /// 防止輸入?yún)?shù)sql注入:Post Get Cookies
    /// </summary>
    public class SqlFilter : ActionFilterAttribute
    {
        private const string FilterSql = "execute,exec,select,insert,update,delete,create,drop,alter,exists,table,sysobjects,truncate,union,and,order,xor,or,mid,cast,where,asc,desc,xp_cmdshell,join,declare,nvarchar,varchar,char,sp_oacreate,wscript.shell,xp_regwrite,',%,;,--";

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            // -----------------------防 Post 注入-----------------------
            if (filterContext.HttpContext.Request.Form != null)
            {
                var isReadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
                //把 Form 屬性改為可讀寫
                isReadonly?.SetValue(filterContext.HttpContext.Request.Form, false, null);

                for (var k = 0; k < filterContext.HttpContext.Request.Form.Count; k++)
                {
                    var inputKey = filterContext.HttpContext.Request.Form.Keys[k];
                    var inputValue = filterContext.HttpContext.Request.Form[inputKey];
                    var filters = FilterSql.Split(',');
                    inputValue = filters.Aggregate(inputValue, (current, filterSql) => Regex.Replace(current, filterSql, "", RegexOptions.IgnoreCase));
                    filterContext.HttpContext.Request.Form[inputKey] = inputValue;
                }
            }


            // -----------------------防 GET 注入-----------------------
            if (filterContext.HttpContext.Request.QueryString != null)
            {
                var isReadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
                //把 QueryString 屬性改為可讀寫
                isReadonly?.SetValue(filterContext.HttpContext.Request.QueryString, false, null);

                for (var k = 0; k < filterContext.HttpContext.Request.QueryString.Count; k++)
                {
                    var inputKey = filterContext.HttpContext.Request.QueryString.Keys[k];
                    var inputValue = filterContext.HttpContext.Request.QueryString[inputKey];
                    var filters = FilterSql.Split(',');
                    inputValue = filters.Aggregate(inputValue, (current, filterSql) => Regex.Replace(current, filterSql, "", RegexOptions.IgnoreCase));
                    filterContext.HttpContext.Request.QueryString[inputKey] = inputValue;
                }
            }


            // -----------------------防 Cookies 注入-----------------------
            if (filterContext.HttpContext.Request.Cookies.Count > 0)
            {
                var isReadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
                //把 Cookies 屬性改為可讀寫
                isReadonly?.SetValue(filterContext.HttpContext.Request.Cookies, false, null);

                for (var k = 0; k < filterContext.HttpContext.Request.Cookies.Count; k++)
                {
                    var inputKey = filterContext.HttpContext.Request.Cookies.Keys[k];
                    var inputValue = filterContext.HttpContext.Request.Cookies[inputKey]?.Value;
                    var filters = FilterSql.Split(',');
                    inputValue = filters.Aggregate(inputValue, (current, filterSql) => Regex.Replace(current, filterSql, "", RegexOptions.IgnoreCase));
                    if (!(filterContext.HttpContext.Request.Cookies[inputKey] is null))
                    {
                        filterContext.HttpContext.Request.Cookies[inputKey].Value = inputValue;
                    }
                }
            }
            base.OnActionExecuting(filterContext);
        }
    }

到了這里,關(guān)于.Net 全局過濾,防止SQL注入的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • c# .net mvc的IHttpHandler奇妙之旅--圖片文件請(qǐng)求安全過濾,圖片防盜鏈

    源碼下載: c# .net mvc圖片文件請(qǐng)求安全過濾,圖片防盜鏈 https://download.csdn.net/download/cplvfx/88206428 在閱讀該文章前,請(qǐng)先閱讀該文章 c# .net mvc的IHttpHandler奇妙之旅。.net的生命周期和管道你聽說過嗎?你可以利用他處理業(yè)務(wù)如:跳轉(zhuǎn)業(yè)務(wù)頁面,文件請(qǐng)求的安全過濾,等等,還有許

    2024年02月13日
    瀏覽(16)
  • 使用asp.net core web api創(chuàng)建web后臺(tái),并連接和使用Sql Server數(shù)據(jù)庫

    使用asp.net core web api創(chuàng)建web后臺(tái),并連接和使用Sql Server數(shù)據(jù)庫

    前言:因?yàn)橐獙懸粋€(gè)安卓端app,實(shí)現(xiàn)從服務(wù)器中獲取電影數(shù)據(jù),所以需要搭建服務(wù)端代碼,之前學(xué)過C#,所以想用C#實(shí)現(xiàn)服務(wù)器段代碼用于測(cè)試,本文使用C#語言,使用asp.net core web api組件搭建服務(wù)器端,并訪問sql server 數(shù)據(jù)庫。 一、安裝Visual studio 2022 社區(qū)版,并安裝ASP.NET和

    2024年02月14日
    瀏覽(28)
  • .NET項(xiàng)目中使用HtmlSanitizer防止XSS攻擊

    .NET項(xiàng)目中使用HtmlSanitizer防止XSS攻擊

    最近博客也是上線了留言板功能,但是沒有做審核(太懶了),然后在留言的時(shí)候可以輸入 scriptalert(\\\'xss\\\')/script 標(biāo)簽去讓網(wǎng)站彈出提示信息、跳轉(zhuǎn)網(wǎng)頁等,這類攻擊也被稱為XSS攻擊。 XSS攻擊(跨站腳本攻擊)是一種常見的網(wǎng)絡(luò)安全漏洞,攻擊者通過在網(wǎng)頁中注入惡意腳本,使

    2024年02月08日
    瀏覽(27)
  • .net core 6 使用注解自動(dòng)注入實(shí)例,無需構(gòu)造注入 autowrite4net

    .net core 6 使用注解自動(dòng)注入實(shí)例,無需構(gòu)造注入 autowrite4net

    像java使用@autowrite一樣使用 1、前提先注冊(cè)到ioc容器當(dāng)中 ????????builder.Services.AddScoped 2、nuget引入AutoWrite4Net 3、啟用 4、在類上使用注解 5、實(shí)例上使用注解 6、即可直接使用,且在使用AddScoped方式注入的實(shí)例也保持生命周期不發(fā)生變化 7、出現(xiàn)System.InvalidOperationException:“*

    2024年01月23日
    瀏覽(16)
  • .NET Core 依賴注入

    在.NET Core中,依賴注入(Dependency Injection,簡(jiǎn)稱DI)是框架的一個(gè)重要特性,可以幫助我們解耦代碼、管理對(duì)象生命周期以及提高可測(cè)試性等.一下是.NET Core中依賴注入的一些基本概念和用法: 1、服務(wù)(Service):在DI中,服務(wù)即一個(gè)對(duì)象或者類型。用于完成特定的功能.例如,數(shù)據(jù)庫訪

    2023年04月24日
    瀏覽(94)
  • 小迪安全19WEB 攻防-.NET 項(xiàng)目&DLL 反編譯&未授權(quán)訪問&配置調(diào)試報(bào)錯(cuò)

    小迪安全19WEB 攻防-.NET 項(xiàng)目&DLL 反編譯&未授權(quán)訪問&配置調(diào)試報(bào)錯(cuò)

    # ASPX 知識(shí)點(diǎn): 1 、 .NET 配置調(diào)試 - 信息泄露 2 、 .NET 源碼反編譯 -DLL 反編譯 3 、 .NET 常見安全問題 - 未授權(quán)訪問 .NET:大部分都是通性漏洞;與java語言類似;本身被封裝后,需要通過反編譯獲取之前的信息;大部分都是在windows上進(jìn)行;#c是針對(duì).net開發(fā)的,.net是一個(gè)開發(fā)框架;

    2024年01月21日
    瀏覽(28)
  • asp.net core中間件預(yù)防防止xss攻擊

    上面實(shí)現(xiàn)思路是針對(duì)json序列化后的string字符串進(jìn)行編碼防止xss攻擊 其他實(shí)現(xiàn)比如中間件、Action的AOP方法也是可以的,可以自己實(shí)現(xiàn) 主要是看web項(xiàng)目使用的是那個(gè)json序列化工具newtonsoft就用newtonsoft,system.text.json就用下面的那個(gè)

    2024年02月07日
    瀏覽(21)
  • .NET使用依賴注入,控制反轉(zhuǎn)

    .NET 支持依賴項(xiàng)注入 (DI) 軟件設(shè)計(jì)模式,這是一種在類及其依賴項(xiàng)之間實(shí)現(xiàn) 控制 (IoC) 的反轉(zhuǎn) 的技術(shù) 避免有狀態(tài)的、靜態(tài)類和成員。 通過將應(yīng)用設(shè)計(jì)為改用單一實(shí)例服務(wù),避免創(chuàng)建全局狀態(tài)。 避免在服務(wù)中直接實(shí)例化依賴類。 直接實(shí)例化會(huì)將代碼耦合到特定實(shí)現(xiàn)。 不在服務(wù)

    2023年04月16日
    瀏覽(28)
  • MySQL 安全及防止 SQL 注入攻擊

    如果通過網(wǎng)頁獲取用戶輸入的數(shù)據(jù)并將其插入? MySQL ?數(shù)據(jù)庫,那么就有可能發(fā)生? SQL 注入攻擊的安全問題 作為研發(fā),有一條鐵律需要記住,那就是 永遠(yuǎn)不要相信用戶的數(shù)據(jù),哪怕他一再承諾是安全的 SQL ?注入,就是通過把? SQL ?命令插入到? Web ?表單遞交或輸入域名或頁

    2024年02月02日
    瀏覽(41)
  • .NET 通過源碼深究依賴注入原理

    .NET 通過源碼深究依賴注入原理

    依賴注入 (DI) 是.NET中一個(gè)非常重要的軟件設(shè)計(jì)模式,它可以幫助我們更好地管理和組織組件,提高代碼的可讀性,擴(kuò)展性和可測(cè)試性。在日常工作中,我們一定遇見過這些問題或者疑惑。 Singleton服務(wù)為什么不能依賴Scoped服務(wù)? 多個(gè)構(gòu)造函數(shù)的選擇機(jī)制? 源碼是如何識(shí)別循環(huán)

    2024年02月05日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包