asp.net core webApi 引數保護
asp.net core webApi 引數保護
Intro
asp.net core data protection 擴充套件,基於IDataProtector
擴充套件的資料保護元件,自動化的實現某些引數的保護
ParamsProtection
ParamsProtection
是為了保護 asp.net core webapi 專案的某些引數而設計的,也可以用來做一定程度上的反爬蟲。
GetStarted
安裝 nuget 包ofollow,noindex" target="_blank">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
的值來指定要進行引數保護的引數名稱