asp.net core 參數保護


asp.net core 參數保護

Intro

asp.net core data protection 擴展,基於 IDataProtector 擴展的數據保護組件,自動化的實現某些參數的保護

ParamsProtection

ParamsProtection 是為了保護 asp.net core 項目的某些參數而設計的,也可以用來做一定程度上的反爬蟲。

GetStarted

安裝 nuget 包 WeihanLi.DataProtection

通過示例項目查看更多詳細信息

services.AddDataProtection()
            .AddParamsProtection(options =>
            {
                options.ProtectParams = new[]
                {
                    "id"
                };
            });

跑起來示例項目,你可以直接在 sample 項目下運行 dotnet run 命令,在瀏覽器中訪問 /api/values 路徑,你會得到類似以下的響應結果

[
  {
    "id": "CfDJ8MvS3iyCJCJCrNda10tFrJu_HXavFbumMGxov9ly0XkFRG6O-HxgLwoqTnc4GQ27Zpby4kNOZBNlNK-1ctAWfuuBkkfoG96szEHXixZvUl6b2JlV1yt1MVUq5MHSOeYOGw",
    "val": "value1"
  },
  {
    "id": "CfDJ8MvS3iyCJCJCrNda10tFrJv9haZxFcv9bx2V3ZUKAMxGVD5aQzdzHfqB3XPfpZvQfzPHqxacA2i--hVnXAqzIBJ9ytQ72alekFFqzSFHjZwOTVwr4SMwOlfqm1zkMqFSUg",
    "val": "value2"
  }
]

原來的業務代碼里你什么都不需要做,還是直接返回原來的內容即可,原來的返回內容如下:

return Ok(new[] {
            new
            {
                id = 1,
                val = "value1"
            },
            new
            {
                id =2,
                val ="value2"
            } });

因為在啟動的時候已經設置了 id 參數應該被保護,所以當你訪問 /api/values/{id} 這個地址的時候,如果沒有設置 AllowUnprotectedParamstrue 的話,直接使用原始的 int 類型的 id 去訪問就會得到一個 4xx(默認是412) 狀態碼的響應,如果用從 /api/values 返回的 id 的值去訪問就會正常的拿到響應。

除此之外你可以設置被保護的值的過期時間,通過設置一個比較短的過期時間來一定程度上的反爬蟲,有個不太友好的地方就是可能會一定程序上的影響用戶體檢,如果用戶打開一個頁面長期沒有操作就可能會導致某些操作可能會失敗,需要用戶重新操作。

你也可以是 POSTPUT 請求中使用被保護的值,如果被保護的值已經過期,你會從服務得到一個 4xx(默認 412) 的響應。

More

你可以設置更多參數來更適合你的使用

/// <summary>
/// ProtectorPurpose
/// </summary>
public string ProtectorPurpose { get; set; } = "ParamsProtection";

/// <summary>
/// ExpiresIn, minutes
/// </summary>
public int? ExpiresIn { get; set; }

/// <summary>
/// Enabled for paramsProtection
/// </summary>
public bool Enabled { get; set; } = true;

/// <summary>
/// Allow unprotected params
/// </summary>
public bool AllowUnprotectedParams { get; set; }

/// <summary>
/// Invalid request response http status code
/// refer to https://restfulapi.net/http-status-codes/
/// </summary>
public int InvalidRequestStatusCode { get; set; } = 412;

/// <summary>
/// the params to protect
/// </summary>
public string[] ProtectParams { get;set; }

你可以改變一些值來改變參數保護模式:

  • 設置 Enabledfalse 以禁用參數保護
  • 修改 ProtectorPurpose 的值以改變 DataProtector 的 purpose
  • 設置 AllowUnprotectedParamstrue 以允許原始參數的訪問
  • 設置 InvalidRequestStatusCode 的值來改變不合法參數訪問時響應的 Status Code
  • 修改 ExpiresIn 的值以改變已經保護的參數的值的過期時間
  • 設置 ProtectParams 的值來指定要進行參數保護的參數名稱

Contact

Contact me: weihanli@outlook.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM