私は偽造防止がどのように機能するかを正確に理解しようとしてきました。私を混乱させるのは、作成されたCookieです。私の理解では、フォームに偽造防止トークンを含め、リクエストが行われたときにそのトークンを検証します。このように、サードパーティのWebサイトがあなたのWebサイトに投稿した場合、それは拒否されます。
今、私はここhttps://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery?view=aspnetcore-2.1を読んでいますが、偽造防止トークンはCookieに保存されています。これを間違って読んでいますか?しかし、なぜ?これの全体的なポイントは、この値をWebサイトの外部からアクセス可能にしないことではありませんか?私のクッキーを見ると、名前に偽造防止剤を使用して作成された3つのクッキーがあります。
services.AddAntiforgery(options =>
{
options.CookieDomain = "contoso.com";
options.CookieName = "X-CSRF-TOKEN-COOKIENAME";
options.CookiePath = "Path";
options.FormFieldName = "AntiforgeryFieldname";
options.HeaderName = "X-CSRF-TOKEN-HEADERNAME";
options.RequireSsl = false;
options.SuppressXFrameOptionsHeader = false;
});
ちょっとしたテストをして、偽造防止トークンを含む投稿フォームを作成し、それを送信してみたところ、うまくいきました。次に、トークンなしで別のフォームを作成しましたが、失敗しました。だから私には、フォームで渡されたトークンだけを探すようですが、Cookieは何のためのものですか?
偽造防止は2つの部分からなるプロセスです。ページが生成されると、トークンがフォームの一部として含まれるため、残りのデータと一緒に投稿されます。物事のクライアント側のために、クッキーが設定されます。ポストが行われると、クライアントは、(トークンを含む)後のデータとのリクエストを送信し、それはまた、トークンが含まれ、サーバーへのクッキーのバックを送信します。サーバー側では、投稿されたトークンはCookieトークンと照合され、2つが一致しない場合は拒否されます。
クライアントが両方を投稿しているため、これは奇妙に思えるかもしれませんが、Cookieの部分により、ページを取得した同じクライアントが、ページを送り返す同じクライアントでもあることが保証されます。目標は、偽造防止トークンを保護することではなく、詐欺師が再作成したページではなく、サイト上のページが送信されたページであることを確認することです。サードパーティはドメインにCookieを設定できないため、リクエストしてトークンを解析することでページから有効なトークンを取得できたとしても、チェックのこの部分を偽造することはできません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加