次の設定を見ています。 WebアプリケーションはREST APIを使用してサーバーと通信します。すべてのAPI応答にはOrigin: *
が含まれます。認証にはAuthorization: Bearer <token>
が使用されます。Access-Control-Allow-Headers: Authorization
も含まれます適切なプリフライトリクエスト。
Origin: *
が構成されているため、最新のブラウザーはベアラートークンなどの認証データを送信しません。
これにより、ドメイン間でAPIリクエストを使用できなくなります 認証が必要 。
これを脆弱性と見なすべき理由を正当化するのに苦労しています。 Originを許可することは悪い習慣です。データ漏洩につながる可能性がありますが、このシナリオでは発生しません。
これは別の方法で悪用される可能性がありますか、私は現在見ていませんか、これは実際には単に悪い習慣であり、実際の脅威をもたらしていませんか?
[〜#〜] edit [〜#〜]:CORS応答ヘッダーは(Origin: *
は要求ヘッダーです):
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Authorization
ACAO:*は、ブラウザーがautomaticallyから任意の形式の資格情報を送信できないようにしますが、これは、ブラウザーが実際に自動的に送信できる種類(CookieとHTTP BASIC、DIGEST、およびNTLM認証)にのみ関連します。 HTTP authはAuthorizationヘッダーを使用しますが、Bearerトークンは使用しません。 ACAH:Authorizationはプリフライトと実際のリクエストの両方に指定されているため、呼び出し元は完全に自由にexplicitly Authorizationヘッダーを付加できます(ベアラートークンを含む、任意の値を使用)。違いは、呼び出し元が実際にそのヘッダーに入れる値を知っている必要があることです。 自動的にはブラウザによって追加されません。
攻撃者はすでにベアラートークンを知っている必要があり、ブラウザーがリクエストにシークレットを自動的に含めないことを考えると、ここにはセキュリティの脆弱性はまったくありません。ブラウザがこのような許可されたリクエストを任意のオリジンから行うことを許可することは問題ありません。これは、ブラウザが同じサーバーに同じ元のコールバックを行い、サーバーにリクエストを送信させることとまったく同じです(ほとんどのHTTPクライアントライブラリには同じ元のポリシーの概念さえないため、CORSは無視されます)。ブラウザへの応答。言い換えると、これはベアラートークンで保護された他のWebサービスよりも大きなセキュリティリスクではありません。
もちろん、これはすべて、Webサービスが任意のアドレスから到達可能であることが想定されていることを前提としています。そうでない場合(たとえば、1つの会社からのみ到達可能であると想定されている場合)、許可される発信元をより厳しく制限することは少しに意味があります。ただし、HTTPクライアントライブラリ(およびベアラートークンがなく、認証がない場合は攻撃者が何もできない)を持っている人は、IPホワイトリストのようなものがない限り、一日中リクエストを送信できるため、ほんの少しだけです。
あなたがそれを説明したように、サービスのセキュリティの主要かつ重要な部分は、無記名トークンです。最初の概算では、他には何も問題ありません。
そうは言っても、もちろん他にもチェックすべき脆弱性がたくさんあります。明らかに、Bearerトークンが、アクセスを許可する情報と少なくとも同じくらい秘密であることを確認する必要があります。たとえば、Webサービスにアクセスするために承認を要求してから、必要な承認データをGitリポジトリにプッシュするのはよくありません。同様に、有効なベアラートークンを推測、ブルートフォース、またはタイミング攻撃で見つけられないことを確認してください。認証を台無しにする方法はたくさんありますが、一般にWebサービスを台無しにする方法はたくさんあります(HTTP経由で利用できるのか、弱いHTTPS暗号スイート経由で利用できるのか?逆シリアル化またはXML DTDの脆弱性があるのか?標準のWebセキュリティ関連のもの)。