asp.Netcoreパラメータ保護
3430 ワード
asp.Netcoreパラメータ保護
Intro
asp.Netcore data protection拡張、IDataProtector
拡張データ保護コンポーネントに基づいて、いくつかのパラメータの保護を自動化
ParamsProtection
ParamsProtection
はaspを保護するためである.Netcore webapiプロジェクトのいくつかのパラメータで設計され、ある程度の反爬虫類にも使用できます.
GetStarted
nugetパッケージをインストールします.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をそのまま使用してアクセスすると4 xx(デフォルトは412)ステータスコードの応答が得られ、/api/values
から返されたidの値でアクセスすると正常に応答が得られます.
それ以外に、保護された値の期限切れを設定することができます.比較的短い期限切れを設定することで、ある程度の反爬虫類を設定することができます.あまり友好的ではないところは、プログラム上のユーザーの健康診断に影響を与える可能性があります.ユーザーがページを開けて長い間操作していないと、いくつかの操作が失敗する可能性があります.ユーザーの再操作が必要です.
また、POST
またはPUT
リクエストで保護された値を使用することもできます.保護された値が期限切れになった場合、サービスから4 xx(デフォルト412)の応答が得られます.
More
使用に適したパラメータを設定できます///
/// ProtectorPurpose
///
public string ProtectorPurpose { get; set; } = "ParamsProtection";
///
/// ExpiresIn, minutes
///
public int? ExpiresIn { get; set; }
///
/// Enabled for paramsProtection
///
public bool Enabled { get; set; } = true;
///
/// Allow unprotected params
///
public bool AllowUnprotectedParams { get; set; }
///
/// Invalid request response http status code
/// refer to https://restfulapi.net/http-status-codes/
///
public int InvalidRequestStatusCode { get; set; } = 412;
///
/// the params to protect
///
public string[] ProtectParams { get;set; }
パラメータ保護モードを変更するには、いくつかの値を変更します.
services.AddDataProtection()
.AddParamsProtection(options =>
{
options.ProtectParams = new[]
{
"id"
};
});
[
{
"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"
} });
///
/// ProtectorPurpose
///
public string ProtectorPurpose { get; set; } = "ParamsProtection";
///
/// ExpiresIn, minutes
///
public int? ExpiresIn { get; set; }
///
/// Enabled for paramsProtection
///
public bool Enabled { get; set; } = true;
///
/// Allow unprotected params
///
public bool AllowUnprotectedParams { get; set; }
///
/// Invalid request response http status code
/// refer to https://restfulapi.net/http-status-codes/
///
public int InvalidRequestStatusCode { get; set; } = 412;
///
/// the params to protect
///
public string[] ProtectParams { get;set; }
Enabled
をfalse
に設定.ProtectorPurpose
の値を変更してDataProtector
のpurpose AllowUnprotectedParams
をtrue
に設定し、元のパラメータへのアクセスを可能にするInvalidRequestStatusCode
の値を設定、不正なパラメータアクセス時に応答するStatus Code ExpiresIn
の値を変更して、保護パラメータの値の有効期限ProtectParams
の値を設定する.Contact
Contact me: [email protected]