📗
owasp-asvs-ja
  • OWASP Application Security Verification Standard ja
  • OWASP アプリケーションセキュリティ検証標準 5.0 日本語版
    • ヘッダ
    • 口絵
    • 序文
    • ASVS の使い方
    • 監査と認証
    • バージョン 4.0 ユーザ向けのガイダンス
    • V1: エンコーディングとサニタイゼーション
    • V2: バリデーションとビジネスロジック
    • V3: Web フロントエンドセキュリティ
    • V4: API と Web サービス
    • V5: ファイル処理
    • V6: 認証
    • V7: セッション管理
    • V8: 認可
    • V9: 自己完結型トークン
    • V10: OAuth と OIDC
    • V11: 暗号化
    • V12: 安全な通信
    • V13: 構成
    • V14: データ保護
    • V15: セキュアコーディングとアーキテクチャ
    • V16: セキュリティログ記録とエラー処理
    • V17: WebRTC
    • 付録 A: 用語集
    • 付録 B: 参考情報
    • 付録 V: 暗号化
    • 付録 X: 推奨事項
  • OWASP アプリケーションセキュリティ検証標準 4.0 日本語版
    • ヘッダ
    • 口絵
    • 序文
    • ASVS の使い方
    • 監査と認証
    • V1: アーキテクチャ、設計、脅威モデリング
    • V2: 認証
    • V3: セッション管理
    • V4: アクセス制御
    • V5: バリデーション、サニタイゼーション、エンコーディング
    • V6: 保存時における暗号化
    • V7: エラー処理とログ記録
    • V8: データ保護
    • V9: 通信
    • V10: 悪意あるコード
    • V11: ビジネスロジック
    • V12: ファイルとリソース
    • V13: API と Web サービス
    • V14: 構成
    • 付録 A: 用語集
    • 付録 B: 参考情報
    • 付録 C: Internet of Things の検証要件
Powered by GitBook
On this page
  • 管理目標
  • V4.1 一般的な Web サービスセキュリティ
  • V4.2 HTTP メッセージ構造バリデーション
  • V4.3 GraphQL
  • V4.4 WebSocket
  • 参考情報

Was this helpful?

  1. OWASP アプリケーションセキュリティ検証標準 5.0 日本語版

V4: API と Web サービス

管理目標

Web ブラウザや他のコンシューマが使用する API を公開するアプリケーション (通常 JSON, XML, GraphQL を使用) には、特にいくつかの考慮事項が適用されます。この章では、関連するセキュリティ構成と適用すべきメカニズムについて説明します。

他の章にある認証、セッション管理、入力バリデーションの懸念事項は API にも適用されるので、この章をコンテキストから切り離したり、個別にテストすることはできないことに注意してください。

V4.1 一般的な Web サービスセキュリティ

このセクションでは、一般的な Web サービスセキュリティの考慮事項と、その結果としての基本的な Web サービス衛生習慣について説明します。

#
説明
レベル
#v5.0.be

4.1.1

メッセージボディを持つすべての HTTP レスポンスにはレスポンスの実際のコンテンツと一致する Content-Type ヘッダフィールドを含んでいる。これには "text/", "/+xml", "/xml" などの IANA メディアタイプに従って安全な文字エンコーディング (UTF-8, ISO-8859-1 など) を指定する charset パラメータを含んでいる。

1

v5.0.be-13.1.7

4.1.2

ユーザ向けのエンドポイント (手動でのウェブブラウザアクセス用) のみが HTTP から HTTPS に自動的にリダイレクトし、他のサービスやエンドポイントでは透過的なリダイレクトを実装していない。これは、クライアントが誤って暗号化されていない HTTP リクエストを送信しても、リクエストが自動的に HTTPS に自動的にリダイレクトされるため機密データの漏洩が発見されない、という状況を避けるためである。

2

v5.0.be-13.1.8

4.1.3

アプリケーションにより使用され、ロードバランサ、Web プロキシ、backend-for-frontend サービスなどの中間層により設定される HTTP ヘッダフィールドはエンドユーザによって上書きできない。ヘッダの例としては X-Real-IP, X-Forwarded-*, X-User-ID などがある。

2

v5.0.be-13.6.3

4.1.4

アプリケーションまたはその API によって明示的にサポートされている HTTP メソッド (preflight リクエスト時の OPTIONS を含む) のみが使用でき、未使用のメソッドはブロックされる。

3

v5.0.be-13.6.1

4.1.5

メッセージごとのデジタル署名を使用して、機密性が高いリクエストやトランザクションや、多数のシステムを横断するリクエストまたはトランザクションに対して、トランスポート保護の上にさらなる保証を提供している。

3

v5.0.be-13.1.6

V4.2 HTTP メッセージ構造バリデーション

このセクションでは、リクエストスマグリング、レスポンス分割、ヘッダインジェクション、長すぎる HTTP メッセージによるサービス拒否などの攻撃を防ぐために、HTTP メッセージの構造とヘッダフィールドを検証する方法について詳しく説明します。

これらの要件は、一般的な HTTP メッセージの処理と生成に関連しますが、特に異なる HTTP バージョン間で HTTP メッセージを変換する場合にも関連します。

#
説明
レベル
#v5.0.be

4.2.1

すべてのアプリケーションコンポーネント (ロードバランサ、ファイアウォール、アプリケーションサーバを含む) は、HTTP バージョンに適したメカニズムを使用して、受信 HTTP メッセージの境界を決定し、HTTP リクエストスマグリングを防いでいる。HTTP/1.x では、Transfer-Encoding ヘッダフィールドが存在する場合、Content-Length ヘッダフィールドを RFC 2616 に従って無視する必要がある。HTTP/2 または HTTP/3 を使用する際に、Content-Length ヘッダフィールドが存在する場合、受信側はそれが DATA フレームの長さと一致することを確保する必要がある。

2

v5.0.be-13.6.2

4.2.2

HTTP メッセージを生成する際、HTTP リクエストスマグリングを防ぐために、Content-Length ヘッダフィールドが HTTP プロトコルのフレームで決定されるコンテンツの長さと競合しない。

3

v5.0.be-13.7.1

4.2.3

アプリケーションは、レスポンス分割やヘッダインジェクション攻撃を防ぐために、Transfer-Encoding などの接続固有のヘッダフィールドを持つ HTTP/2 や HTTP/3 メッセージを送受信しない。

3

v5.0.be-13.7.2

4.2.4

アプリケーションは、ヘッダインジェクション攻撃を防ぐために、ヘッダフィールドと値に CR (\r)、LF (\n)、CRLF (\r\n) シーケンスを含まない HTTP/2 および HTTP/3 リクエストのみを受け付ける。

3

v5.0.be-13.7.3

4.2.5

アプリケーション (バックエンドまたはフロントエンド) がリクエストを構築して送信する場合、バリデーション、サニタイゼーション、またはその他のメカニズムを使用して、受信コンポーネントで受け入れられるには長すぎる URI (API 呼び出しのためなど) や HTTP リクエストヘッダフィールド (認可やクッキーのためなど) の作成を回避している。長すぎるリクエスト (長いクッキーヘッダフィールドなど) を送信すると、サーバが常にエラーステータスで応答するなど、サービス拒否を引き起こす可能性がある。

3

v5.0.be-10.4.9

V4.3 GraphQL

GraphQL はさまざまなバックエンドサービスと密結合しないデータリッチなクライアントを作成する方法として、より一般的になりつつあります。このセクションでは GraphQL のセキュリティに関する考慮事項について説明します。

#
説明
レベル
#v5.0.be

4.3.1

コストが高く、ネストされたクエリの結果としての GraphQL やデータレイヤエクスプレッションのサービス拒否 (DoS) を防止するために、クエリ許可リスト、深さ制限、量制限、またはクエリコスト分析を使用している。

2

v5.0.be-13.4.1

4.3.2

Graph API が他の関係者により使用されることを意図している場合を除き、本番環境では GraphQL イントロスペクションクエリが無効になっている。

2

v5.0.be-13.4.3

V4.4 WebSocket

WebSocket は単一の TCP 接続で同時双方向通信チャネルを提供する通信プロトコルです。2011 年に IETF によって RFC 6455 として標準化され、HTTP ポート 443 と 80 で動作するように設計されていますが、HTTP とは異なります。

このセクションでは、特にこのリアルタイム通信チャネルを悪用する、通信セキュリティとセッション管理に関連する攻撃を防ぐための主要なセキュリティ要件について説明します。

#
説明
レベル
#v5.0.be

4.4.1

WebSocket over TLS (WSS) がすべての WebSocket 接続に使用されている。

1

v5.0.be-13.5.1

4.4.2

最初の HTTP WebSocket ハンドシェイクで Origin ヘッダフィールドがアプリケーションで許可されているオリジンのリストと照合されている。

2

v5.0.be-13.5.2

4.4.3

アプリケーションの標準セッション管理を使用できない場合、関連するセッション管理セキュリティ要件に準拠した専用トークンが使用されている。

2

v5.0.be-13.5.3

4.4.4

専用の WebSocket セッション管理トークンは、既存の HTTPS セッションを WebSocket チャネルに移行するときに、以前に認証された HTTPS セッションを通じて最初に取得または検証されます。

2

v5.0.be-13.5.4

参考情報

詳しくは以下の情報を参照してください。

PreviousV3: Web フロントエンドセキュリティNextV5: ファイル処理

Last updated 12 days ago

Was this helpful?

と の GraphQL Authorization のリソース

OWASP REST Security Cheat Sheet
graphql.org
Apollo
WSTG - v4.2 | GraphQL Testing
WSTG - v4.1 | OWASP Foundation