クロスサイトリクエスト偽造からの保護
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
Angularのセキュリティドキュメントでは、クロスサイトリクエスト偽造(CSRF、または場合によってはXSRF)の試みからAngularがどのように防御するかが説明されています。
一般的な手法として、アプリケーションサーバーがランダムに生成された認証トークンをクッキーに送信します。クライアントコードはこのクッキーを読み取り、その後のすべてのリクエストにトークンを含むカスタムリクエストヘッダーを追加します。サーバーは受信したクッキーの値とリクエストヘッダーの値を比較し、値が欠落しているか一致しない場合はリクエストを拒否します。
SPEAK 3では、ユーザーがページをリクエストすると、SPEAK 3のエントリポイントが2つのアンチCSRFクッキーを設定します。クライアントは以下のいずれかのオプションを使ってトークンをサーバーに渡さなければなりません。
サーバーコードは、クッキーに保存された元の鍵とクライアントが渡すトークンがヘッダーまたはリクエスト本体として対応していることを検証します。
Send as a request header
この方法を推奨します。これはAngularに内蔵された セキュリティ機能 を利用するため、最も簡単な方法です。
このオプションは、ValidateHttpAntiForgeryToken属性とX-RequestVerificationTokenヘッダーを使用するWeb APIサービスに適用できます。
しかし、Angularは名前のヘッダーをX-XSRF-TOKENを設定します。
ヘッダー名をバックエンドサービスが期待するものに変更できます:
-
SPEAK 3のエントリーポイントソリューションをご利用ください
-
@speak/ng-scからSciAntiCSRFModuleをapp.module.tsファイルにインポートしてください:
import { SciAntiCSRFModule } from '@speak/ng-sc/anti-csrf'; @NgModule({ imports: SciAntiCSRFModule, ... , ... })
これは、アプリケーションがAngular HTTPモジュールを使ってリクエストを行う限り、反CSRFサポートを実装します。
Sendをリクエストボディとして
このオプションはASP.NET MVCまたはASP.NETウェブフォームサービスにご利用ください。
アクセスしたいサービスがValidateAntiForgeryToken属性を使用している場合、送信をリクエストヘッダーとして使うことはできません。代わりに、アプリケーションは各HTTPリクエストに対して__RequestVerificationTokenリクエストボディキーのXSRF-TOKENトークンを渡さなければなりません。
このコードのスニペットは、このオプションの使い方を示しています:
import { Http, Response, Headers, RequestOptions } from '@angular/http'; import { parseCookieValue } from '@speak/ng-sc/core'; @Injectable() export class MyService { cookieName: string = 'XSRF-TOKEN'; tokenKey: string = '__RequestVerificationToken'; serviceUrl = '/path/to/my/service'; myMethod() { const xsrfToken = parseCookieValue(document.cookie, this.cookieName); const body = new URLSearchParams(); body.append(this.tokenKey, xsrfToken); const headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded'}); const options = new RequestOptions({ headers }); this.http.post(this.serviceUrl, body.toString(), options) .subscribe(() => { // do your thing }); } }
申請書には必ずこのコードをすべての申請に含めなければなりません。
!注詳細については、OWASPサイトでクロス サイトリクエスト偽造(CSRF)について説明しています。
AngularサイトはHTTPレベルの脆弱性を説明しています。