CORSって必要なの?

あとで読む

最初に

CORS(Cross-Origin Resource Sharing)という言葉を見かけるたびに、これっているのだろうか?、セキュリティ的に意味あるのかみたいに考え始めて、 こいつが何なのかよく分からなくなります。 なので、読み返した時に一発で分かるように書き残しておこうと思う。

※もし解釈に間違いがありましたら、教えて頂けると幸いです。 お恥ずかしいながら、あまり自信がありません。

疑問点

  • セキュリティ的に意味あるの?
  • そもそも必要なのか?

結論

セキュリティ的に意味あるの?

セキュリティを強化するものではない。 バックエンドで特定のドメインとのリクエスト、cookieのやり取りを許可するための設定でセキュリティを強化する意味はない。 むしろドメインを許可する事でセキュリティを緩和している。 異なるドメイン間、リクエスト制限を許可する仕組みでありセキュリティに関連するものではある。

そもそも必要なのか?

必要・不要で言うと、SPAアプリでは必要。 設定しないと異なるドメイン間でfetch、Cookieを用いリクエストのやり取りが行えなくなる。

勘違いしていた事

セキュリティに関連して、設定する事でセキュリティが強化されると思っていた。 だが実際には指定したドメインからのリクエストを許可して緩和をしていた。 そして許可したドメイン間でしかリクエストが投げれず、外部からのリクエストを防ぐ事でセキュリティが上がると思っていた。 それがCSRF, XSSの対策になっていると考えていた。 しかし、実際にはcURLなどで直接リクエストを投げる事が出来ていたので、意味ないのではと疑問に思っていた。

CSRF(Cross-Site Request Forgeries)

こちらはユーザが正規サイトにログイン済みの状態で偽サイトのリンクをクリックさせる事でセッションを含んだcookieを使用して、ログインID, パスワード不要で正規サイトの操作を行う攻撃手法である。 現代はSameSiteというcookieが付与されたサイトからしかcookieを送信する事が出来ない仕様になったため意図的にSameSiteの制約を緩めなければ不可能な攻撃になっている。

XSS(Cross-Site Scripting)

正規サイトの脆弱性を突いて、悪意のあるスクリプトを埋め込んでページに訪れた人のブラウザで実行されて、被害に遭う。 こちらはSameSiteの制約があってもスクリプトが実行されるのは正規サイト上なので、効果がない。 対策としては不要なスクリプトを埋め込めないようユーザが入力・投稿できるページにスクリプトを埋め込めないような対策を取る。

これら上記の2つはCORSとは関係なく、設定した所で対策にならない。

最後に

「 CORSはセキュリティを強化するものではない。 」 これだけ覚えていれば、良さそうです。

これで完璧にCORSを理解しました!(笑)

記事に関するコメント等は

🕊:Twitter 👨🏻‍💻:Github 😥:Stackoverflow

でも受け付けています。どこかにはいます。