1. SPEAK 3

クロスサイトリクエスト偽造からの保護

Version: 9.0
日本語翻訳に関する免責事項

このページの翻訳は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レベルの脆弱性を説明しています。

この記事を改善するための提案がある場合は、 お知らせください!