小白開學Asp.Net Core 《八》

来源:https://www.cnblogs.com/haoxiaozhang/archive/2019/07/16/11193559.html
-Advertisement-
Play Games

小白開學Asp.Net Core 《八》 — — .Net Core 數據保護組件 1、背景 我在搞(https://github.com/AjuPrince/Aju.Carefree)這個開源項目的時候,想做一些防止惡意攻擊的小功能(如果 我通過頁面 /Dome/GetData?id=123,那是 ...


小白開學Asp.Net Core 《八》

            — — .Net Core 數據保護組件

1、背景

  我在搞(https://github.com/AjuPrince/Aju.Carefree)這個開源項目的時候,想做一些防止惡意攻擊的小功能(如果 我通過頁面 /Dome/GetData?id=123,那是不是不安全呢?是的,我完全可以嘗試著給id賦值後去獲取數據)怎麼辦呢?在.Net Core 中又給如何處理呢?

2、.Net Core 的數據保護組件

  1、嘗試著在.Net Core 的內部擴展方法中發現

  我們都知道在 .Net Core 中註冊服務,都是在 Startup->ConfigureServices 這個方式中 通過 services.AddXXXX 來添加的,我也嘗試著看看 .Net Core 有無內置的數據保護組件,就利用 VS的智能提示功能 輸入 server.Add 一個個去看,結果就被我我發現了(開心地像個孩子 哈哈)

              

F12 進去後

通過它的註釋(Extension methods for setting up data protection services in an Microsoft.Extensions.DependencyInjection.IServiceCollection.)(譯成中文:在Microsoft.Extensions.DependencyInjection.IServiceCollection設置數據保護服務的擴展方法)。

好,既然找到了,那我們就來學習下它(我們該如何使用它)。

  2、學習、使用

  

 既然知道了(.Net Core 內置了數據保護組件),那我也就在類試圖中去找它了,最終還是被我給找見了。(好不廢話了)

  我們通過上圖可以知道 .Net Core 內置了一個 IDataProtectionProvider  介面 和 IDataProtector 介面,其中 IDataProtectionProvider 介面是創建保護組件的介面,IDataProtector 是數據保護的介面,我們可以實現這兩個介面,創建數據保護組件。

  (肯定有人問我,我怎麼知道的)

 

 同樣的方法,可以去看看,另一個介面。

下麵就讓我們來使用它。

1)、新建一個類

public class DataDemoViewModel
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public DataDemoViewModel(int id, string name)
        {
            Id = id;
            Name = name;
        }
    }

2)、創建模擬數據

 public class DemoController : Controller
 {
     private List<DataDemoViewModel> _listDataProtect = new List<DataDemoViewModel>();

   public DemoController(){
//創建模擬數據
for (int i = 0; i < 6; i++) { _listDataProtect.Add(new DataDemoViewModel(i, "Aju_Carefree" + i)); } } }

3)、在Startup類的ConfigureService方法中添加服務

 services.AddDataProtection();

4)、在DemoController中  DI註入

 public class DemoController : Controller
    {
        private List<DataDemoViewModel> _listDataProtect = new List<DataDemoViewModel>();

        private readonly IDataProtector _dataProtector;


        public DemoController(IDataProtectionProvider dataProtectionProvider)
        {
         
            //創建模擬數據
            for (int i = 0; i < 6; i++)
            {
                _listDataProtect.Add(new DataDemoViewModel(i, "Aju_Carefree" + i));
            }
            _dataProtector = dataProtectionProvider.CreateProtector("aju_carefree_string");
        }
 }

5)、使用

  #region 數據保護組件Demo
        public IActionResult ProtectIndex()
        {
            var outputModel = _listDataProtect.Select(item => new
            {
          //使用 IDataProtector 介面的 Protect 方法對id欄位進行加密 Id
= _dataProtector.Protect(item.Id.ToString()), item.Name }); return Ok(outputModel); } public IActionResult GetProtect(string id) {
       //使用 IDataProtector 介面的 Unprotect 方法對id欄位進行解密
var orignalId = int.Parse(_dataProtector.Unprotect(id)); var outputModel = _listDataProtect.Where(s => s.Id == orignalId); return Ok(outputModel); } #endregion

 6)結果展示

  (1)請求 /Demo/ProtectIndex

 

  刷新頁面,id 值是變的。 

(2)、請求 /Home/GetProtect?id=(id取了上圖中的第一個(框框圈的))

 

說明:

  (1):使用Provider創建Protector 的時候,我們傳入了一個參數“aju_carefree_string”,這個參數標明瞭這個保護器的用途,也可以當作這個保護器的名字。(不同用途的保護器,不能解密對方方加密的數據)

  (2):還有一個類型的數據保護組件(ITimeLimitedDataProtector(帶過期時間的數據保護器))就不在這裡做說明瞭,用法差不多。

  (3):本篇文章,只是對數據保護組件的拋磚引玉(不只是說 它的用法就只能這麼用,完全可以有別的用法。)

  (4):本文的代碼全部上傳至Github(https://github.com/AjuPrince/Aju.Carefree)(DemoController )

 參考文章:

  https://docs.microsoft.com/zh-cn/aspnet/core/security/data-protection/introduction?view=aspnetcore-3.0

 

  如果覺得寫的還不錯的話,就點個推薦唄! 哈哈

 下一篇 需求瞭解些什麼呢?留言哦!(我會從留言最多中選擇一個內容來分享 我的看法及使用(當然前提是我會哦 哈哈))

   本人有意組建蘭州線下.Net 開發社區,有意者加群(QQ:649708779)如果條件允許的話,將會在8月中旬,組織個活動(只是有這個想法)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一章 1.1.2 C#2中的強類型集合 不再有代碼或者變了和屬性關聯,必須處處使用屬性,增強了一致性 ​ 1.2 排序和過濾 排序: ​ c#1 弱類型的比較功能:需要內部創建代碼來進行強轉,繁瑣。遇到強轉不成功時容易出錯。故實現介面時直接指定需要轉的類型。 ​ c#2 以不同方式進行排序: 通過 ...
  • 大二做B/S架構的項目使用了安衡電子秤CHS-D+R和一款掃碼槍,兩個設備的串口使用一樣,這款電子秤是相當的坑,沒有開發的api,無奈只能自己開發Activex了,在B/S架構中進行引用Activex的Guid能夠達到使用本地串口的最終目的. Activex中首先要進行安全簽名的設置 [ComImp ...
  • 大二的一個項目需要用到Activex技術將讀取到串口中的數據在後臺獲取到,並將串口的數據寫入資料庫,這個過程需要在後臺使用C#調用Activex控制項已經使用的方法,然後在前端通過JavaScript進行調用串口的數據進行賦值 <script type="text/javascript"> funct ...
  • 獲取網路文件,通過流保存文件。 //網路路徑文件 string pathUrl = "http://localhost:805/js/site.zip"; System.Net.HttpWebRequest request = null; System.Net.HttpWebResponse res ...
  • 項目中有些時候需要用到正則表達式,但是自己對正則表達式不熟悉,每次學習完,過一段時間(長時間)不用,就又忘了,每次需要用到的時候都需要百度下,比較麻煩,這裡把C#中經常用到的正則表達式做下總結。 正則表達式常用的環境 爬蟲、網站數據驗證、日誌分析、字元串替換、獲取子字元串、文本處理、字元串處理等 正 ...
  • 學習筆記,第一次記錄避免忘記 首先介紹一下本地環境是windows2008 R2-64位。 1. 到nginx官網上下載最新穩定版的安裝包,http://nginx.org/en/download.html; 2.下載後解壓到對應文件夾 3.使用cmd命令進入文件目錄,輸入nginx.exe或者st ...
  • 在這一篇文章中我們創建一個菜單,並通過這個菜單調用我們之前寫的增刪除改查的功能。 ...
  • SQLite簡易版ORM 首先打開項目,使用nuget搜索sqlite-net,如下圖: 下載完成後,我們會多出兩個文件,SQLite.cs和SQLiteAsync.cs。 我們新建一個文件夾SQLiteResources,把這倆文件放進去。 然後我們創建兩個表實體,如下: 接下來我們創建一個SQL ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...