国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

詳解.NET Core中的數據保護組件

2024-07-10 12:48:43
字體:
來源:轉載
供稿:網友

背景介紹

在 OWASP(開放式 Web 應用程序安全項目) 2013 年發布的報告中,將不安全的直接對象引用(Insecure Direct Object Reference)標記為 十大 Web 應用程序風險之一, 其表現形式是對象的引用(例如數據庫主鍵)被各種惡意攻擊利用, 所以對于Api返回的各種主鍵外鍵ID, 我們需要進行加密。

.NET Core 的數據保護組件

.NET Core 中內置了一個IDataProtectionProvider接口和一個IDataProtector接口。其中IDataProtectionProvider是創建保護組件的接口,IDataProtector是數據保護的接口。開發人員可以實現這 2 個接口,創建數據保護組件。
內置的數據保護組件

.NET Core 中默認提供了一個數據保護組件, 下面我們來嘗試使用這個默認組件來保護我們的數據。

例: 當前我們有一個Movie類,代碼如下, 我們期望當獲取Movie對象的時候,Id字段是加密的。

public class Movie {  public Movie(int id, string title)  {   Id = id;   Title = title;  }  public int Id { get; set; }  public string Title { get; set; } }

首先我們需要在Startup.cs中ConfigureService方法中配置使用默認的數據保護組件。

public void ConfigureServices(IServiceCollection services) {  services.AddMvc();  services.AddDataProtection(); }

這段代碼會啟用.NET Core默認的數據保護器。

然后我們創建一個MoviesController, 并在構造函數中注入IDataProtectionProvider對象, 然后使用這個Provider對象創建一個實現IDataProtector接口的數據保護器對象

[Route("movies")] public class MoviesController : Controller {  private readonly IDataProtector protector;   public MoviesController(IDataProtectionProvider provider)  {   this.protector = provider.CreateProtector("protect_my_query_string");  } }

TIPS: 使用Provider創建Protector的時候,我們傳入了一個參數"protect_my_query_string", 這個參數標明了這個保護器的用途,你也可以把它就當成這個保護器的名字。

注意: 不同用途的保護器不能解密對方的加密字符串。, 如果使用了保護器A去解密保護器B生成的字符串,會產生以下異常CryptographicException: The payload was invalid.

然后我們在MovieController中添加2個Api, 一個是獲取所有Movies對象的,一個是獲取指定Movie對象的

[HttpGet] public IActionResult Get() {  var model = GetMovies();    var outputModel = model.Select(item => new  {   Id = this.protector.Protect(item.Id.ToString()),   item.Title,   item.ReleaseYear,   item.Summary  });  return Ok(outputModel); } [HttpGet("{id}")] public IActionResult Get(string id) {  var orignalId = int.Parse(this.protector.Unprotect(id));  var model = GetMovies();     var outputModel = model.Where(item => item.Id == orignalId);  return Ok(outputModel); }            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云梦县| 冕宁县| 宁明县| 邵东县| 桂东县| 米脂县| 普陀区| 南安市| 临澧县| 九龙县| 卢龙县| 红桥区| 和硕县| 临沧市| 万年县| 肇东市| 精河县| 根河市| 库尔勒市| 门源| 江山市| 湛江市| 定西市| 抚顺市| 府谷县| 镇坪县| 武强县| 始兴县| 叙永县| 安丘市| 香港| 梅河口市| 冕宁县| 巴彦淖尔市| 武宣县| 金塔县| 闻喜县| 汝阳县| 恩施市| 崇明县| 保靖县|