Webアプリケーションに対する攻撃
- 能動的攻撃:攻撃者が直接Webサーバーに攻撃する。例:SQLインジェクションがある
- 受動的攻撃:Webサイトに罠を仕掛ける攻撃で、いくつかの種類があるため、以下で記載する
受動的攻撃の種類
- 正規サイトを悪用する受動的攻撃
- サイトをまたがった受動的攻撃
受動的攻撃への対策@ブラウザ
- サンドボックス:できることを制限する環境を用意する考え
- 同一オリジンポリシー:別サイトのスクリプトが勝手にデータを読み取れないようにするセキュリティ制限
同一オリジンである条件
- URLのホストが一致している
- スキームが一致している
- ポート番号が一致している
例:
- https://example.com/app と https://example.com/api → 同一オリジン
- http://example.com と https://example.com → 別オリジン
- https://example.com:8080 と https://example.com:443 → 別オリジン
CORS
CORS:Cross-Origin Resource Sharingの略。異なるオリジン間でリソースを共有するための仕組み。
通常は同一オリジンポリシーによってブロックされますが、サーバーが適切なレスポンスヘッダを返すことで、安全にアクセスを許可できる。
例えると
- 同一オリジンポリシー:マンションのセキュリティーゲート
- CORS:特定の友達だけはセキュリティゲートを通れるようにリストを用意する
CORSの種類
- シンプルなリクエスト
- プリフライトが必要なリクエスト
シンプルなリクエストとは
- HTTPメソッドが限定されている
- GET
- POST
- HEAD
2.リクエストヘッダは以下に限る
- Accept
- Accept-Language
- Content-Language
- Content-Type
*Content-Typeは以下のいずれか - application/x-www-form-urlencoded
- multipart/form-data
- text/plain
上記に当てはまらない場合は全て「プリフライトが必要なリクエスト」
- 本リクエストの前に、ブラウザがOPTIONSリクエストを送信する
- サーバーが「そのメソッド・ヘッダも許可しているよ」と返すと、本リクエストが実行される