ASP.NET Core RazorPagesの偽造防止トークン
これまで、「ASP.NET Core 3.0 RazorPages事始め」ってタイトルを使ってたけど、今回から「事始め」は取ることにします。
formタグヘルパーの偽造防止トークン
Razor Pages では、FormTagHelperが form要素に偽造防止トークンを挿入してくれます。
<form method="post">
...
</form>
これで、以下のような非表示のinputタグ(偽造防止トークン)が自動挿入されます。
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8Kws0PPAm1NChsmiTNfRcsX0TTepdsJf6F51WcaEnzEJH9W0IvKaCaoa7btzRNswqHlUXgzrHgA6rfcka5Jqt3u_93IMOSpOLtDRapBkHEPPhl7sGZ1lwyYlgzEcYpAcGKNeK-zL_8IaHnwMa0-viyY" />
これは、クロスサイトリクエストフォージェリ(Cross site request forgeries、CSRF)と呼ばれる脆弱性対策を行うためのものです。
試しに、ブラウザの開発者ツールを使ってトークンを書き替えてsubmitしてみます。
HTTP ERROR 400 のエラーになりました。
AutoValidateAntiforgeryToken 属性
調べてみたら、AutoValidateAntiforgeryToken
とか ValidateAntiForgeryToken
という属性があるんですが、自動生成されたソースにはこれらの属性を使っている個所はどこにもありません。
デフォルトで、AutoValidateAntiforgeryToken
が適用されてるようです。
偽造防止トークンを生成しない
asp-antiforgery="false"
次のように書くと偽造防止トークンは生成されません。
<form method="post" asp-antiforgery="false">
...
</form>
まあ、あえてそうする理由は普通はないと思いますが...
IgnoreAntiforgeryToken 属性
IgnoreAntiforgeryToken
属性を使うと、特定のページ あるいは、特定のページハンドラ(どうもこの名前が覚えられない...)だけ、偽造防止トークンの必要性を無くすことができます。
試しに、チュートリアルで作成したプログラムの EditModel
クラスにIgnoreAntiforgeryToken
属性を適用してみます。
[IgnoreAntiforgeryToken]
public class EditModel : PageModel
{
今度は、ブラウザの開発ツールで、トークンを書き替えてもエラーにならずに、データを更新することができました。
この属性も前述のasp-antiforgery
と同様に、通常の RazorPages アプリケーションでは、これを使うことはほとんど無いように思います。
Author And Source
この問題について(ASP.NET Core RazorPagesの偽造防止トークン), 我々は、より多くの情報をここで見つけました https://qiita.com/gushwell/items/5718cfcab166de855af7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .