1. CORSがブラウザ設計上の欠陥を補うための暫定策であることを理解してください。
- CORS(クロスオリジンリソース共有)は、クロスオリジンリクエストにおける暗黙的な認証情報によるセキュリティ問題を解決しようとします。
- ブラウザのデフォルト動作は、ユーザーを XSRF 攻撃にさらす危険を生みます。
- CORS はこれらの問題を緩和しようとしますが、セキュリティの観点で根本的な限界があります。
2. CORSはクロスオリジンリクエストの結果を読むことは防ぎますが、リクエスト自体はブロックしません。
- fun-games.example は your-bank.example のデータを読み取れませんが、資金移動のような状態変更リクエストは依然として実行できます。
- これは、ブラウザが Cookie と認証情報をデフォルトで処理する方式によるものです。
3. 効果的なクロスオリジンセキュリティは、暗黙的な認証情報を無視することから始まります。
- クロスオリジンリクエストから Cookie や類似の認証情報を取り除くか、明示的に許可します。
Sec-Fetch-* ヘッダーを活用し、クロスオリジン Cookie をフィルタリングまたは削除するミドルウェアを使用します。
4. 明示的な認証情報は、暗黙的な認証情報より安全な代替手段です。
- Cookie の代わりに、認証トークンには
Authorization ヘッダーを使用します。
- 明示的な認証情報は、サイト間での認証情報の誤用を防ぎます。
- サーバーレンダリングされたサイトには適しませんが、API とクライアントサイドアプリケーションには最適な方法です。
5. SameSite Cookieを実装して、クロスオリジン認証情報の利用を制限してください。
- デフォルトでクロスオリジンリクエストに Cookie が含まれないように、
SameSite=Lax を使用します。
- より厳格なポリシーには
SameSite=Strict を選んでください。ただし、これにより使い勝手(例: クロスオリジン遷移後のログアウト)に影響する可能性があります。
6. シンプルで安全なCORSポリシーを採用してください。
- 基本ポリシー:
Access-Control-Allow-Origin: * および Access-Control-Allow-Methods: * は匿名アクセスのみを許可します。
- このポリシーは、クロスオリジンリクエストにおける暗黙的な認証情報を無効化し、意図しない認証情報の悪用からサイトを保護します。
7. セキュリティのためにCORSポリシーを過度に複雑にしないでください。
- 過度に細かく設定すると、誤った安心感を生むことがあります。
- CORS プロキシやその他の回避策は、ブラウザが強制するポリシーを回避できるため、アクセス制限の努力を無効化します。
8. より安全なWebのデフォルトへ向かう広範な動きを理解してください。
- ブラウザは、クロスオリジン認証情報の問題に対処するため、State Partitioning(Firefox)、Tracking Prevention(Safari)、CHIPS(Chrome)などの方式を模索しています。
- これらの取り組みは、オリジン間での Cookie や認証情報の共有を制限し、ユーザーのセキュリティとプライバシーを改善しようとするものです。
9. CORSが不完全な解決策であることを認識してください。
- CORS の下位互換性は複雑さを増す一方で、根本的なセキュリティ問題を完全には解決できません。
- ブラウザはこれらの問題を緩和するために新しいアプローチをゆっくり採用していますが、進展は一貫していません。
まだコメントはありません。