この質問 を読んだ後、私の理解が正しければ、サーバーはCSRFトークンをCookieとしてダウンストリームに送信します。一見すると、リクエストが同じオリジンのものでなくても、すべてのCookieがブラウザから送信されるため、トークンの目的を損なうように見えます。
ただし、カスタムフィールドとして書き込むには、最初に読み取る必要があります。これは、同じ起源の場合にのみ実行できます。したがって、リクエストは、Cookie jarから「読み取る権限」を持つコードからのものであることを証明します。これは、ブラウザがユーザーに代わって送信するブラウザとは異なります。
しかし、私がそれを正しく理解したかどうかはわかりません。それはどのように機能しますか?
はい、そうです。
Same Origin Policy は、他のドメインが実際のCookie値を読み取れないようにします。
CSRF攻撃では、ブラウザは自動的にCookieを送信します。攻撃者はこれらのCookieを読み取ることはできませんが、クロスサイトリクエストを送信することでそれらを使用できます。
副作用のあるすべてのリクエストに、Cookieメカニズムの外部に送信される検証済みの値を含める必要がある場合、攻撃者がそれを知る方法がないため、CSRFが緩和されます。
X-CSRF-TokenなどのカスタムヘッダーとCookieを送信する目的は、適切に実装されている場合、二重送信と呼ばれる手法がCSRFを軽減することです。それが機能する方法は、CSRFの場合のようにCookieが強制リクエストで自動的に送信されますが、カスタムヘッダーはそうではなく、サーバーが両方を探すため、攻撃者が被害者に攻撃を強いることを阻止します値。二重提出は、アプリケーションが反CSRFトークンの状態を追跡したくない場合に使用されます。