CORSエラーとCSRF対策について素晴らしい記事と発表
CORSって複雑で理解しづらかった
CORSのエラーにちょくちょく出会いますが、
なんとなくその場ではワークアラウンドを実施するだけで、ちゃんと理解できていませんでした。
今回は直近でとても良い説明記事と、CSRFに関する発表を直近でみたので、その備忘録です。
Rails APIモードのためのシンプルで効果的なCSRF対策 / corocn - Kaigi on Rails 2024
ここに書いていたけど、消した内容
9月頃にCORSをリバースプロキシで一時的に回避する内容と簡易的なリポジトリをここに書いていましたが、勘違いしている部分も多く、その内容は消しました。
当時はhttps://httpbin.org へリクエストしてみて、ヘッダを確認して恐らく動くだろうなぁというところまでで確認は止めていましたが、
実際に、ブラウザがクレデンシャル関連の挙動でエラーを返す部分の理解がないもので、あまり意味のある内容ではありませんでした。
また、調べている過程で、cors-anywhereというOSSを発見し、
Github - Rob–W/cors-anywhere/issues/301
Issueには、デモ環境が悪用されたり、色々とセキュリティ上の課題があって、今はリポジトリ自体も更新が止まっている旨が書かれていました。
このIssuesをみてもリバースプロキシを使うという手はそもそも間違いだなという気づきを残していました。
If possible, try to avoid the need for a proxy at all. CORS Anywhere works by combining proxy functionality with CORS. You may not need proxy functionality, if the web service that you are trying to access already supports CORS. This is the preferred solution because it is faster and more reliable.
CORSについて
改めて、この記事の内容は理解がかなり深まったと思います。
- SOPとCORSの説明
- 認証情報有無によるリクエストの違い
- CORSルールと処理の具体的な流れ
- ブラウザの挙動、ポリシーチェック内容の詳細
- ポリシー誤設定によるリスクとデモ
- 安全なCORSポリシーを定義する方法とCSRF対策との関連性
原文はこちらのようです。
CSRF対策について
Rails APIモードのためのシンプルで効果的なCSRF対策 / corocn - Kaigi on Rails 2024
また、こちらの発表もとても素晴らしく、あわせて確認することで、具体的なセキュリティ観点での対策についても学びがありました。
私自身にRailsアプリケーション開発経験はありませんが、具体的にアプリケーションで何をすべきかという点は、他のフレームワークでも共通している部分も多いと思います。
まとめ
最近はAPI+Frontend(SPA)という構成が増えており、CORSに対する理解の必要性を強く感じていましたので、いい記事、いい発表に出会えて、本当に感謝です。
改めて自分の理解をどこかに残したいなと思ったので、ここに具体的な内容を含めていきたいと思います。(今日は寝ます)