asp.net core webApi 參數保護 Intro asp.net core data protection 擴展,基於 擴展的數據保護組件,自動化的實現某些參數的保護 ParamsProtection 是為了保護 asp.net core webapi 項目的某些參數而設計的,也可以用來 ...
asp.net core webApi 參數保護
Intro
asp.net core data protection 擴展,基於 IDataProtector
擴展的數據保護組件,自動化的實現某些參數的保護
ParamsProtection
ParamsProtection
是為了保護 asp.net core webapi 項目的某些參數而設計的,也可以用來做一定程度上的反爬蟲。
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}
這個地址的時候,如果沒有設置 AllowUnprotectedParams
為 true
的話,直接使用原始的 int
類型的 id 去訪問就會得到一個 4xx(預設是412) 狀態碼的響應,如果用從 /api/values
返回的 id 的值去訪問就會正常的拿到響應。
除此之外你可以設置被保護的值的過期時間,通過設置一個比較短的過期時間來一定程度上的反爬蟲,有個不太友好的地方就是可能會一定程式上的影響用戶體檢,如果用戶打開一個頁面長期沒有操作就可能會導致某些操作可能會失敗,需要用戶重新操作。
你也可以是 POST
或 PUT
請求中使用被保護的值,如果被保護的值已經過期,你會從服務得到一個 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; }
你可以改變一些值來改變參數保護模式:
- 設置
Enabled
為false
以禁用參數保護 - 修改
ProtectorPurpose
的值以改變DataProtector
的 purpose - 設置
AllowUnprotectedParams
為true
以允許原始參數的訪問 - 設置
InvalidRequestStatusCode
的值來改變不合法參數訪問時響應的 Status Code - 修改
ExpiresIn
的值以改變已經保護的參數的值的過期時間 - 設置
ProtectParams
的值來指定要進行參數保護的參數名稱
Contact
Contact me: [email protected]