本記事は不確かな情報が多く含まれる可能性がある
本職はフロントエンドエンジニアで、基本的に取得した情報に色をつけ表示させることで会社内での居場所を維持してきた。
ただ最近個人開発でバックエンドに触れることが増えセキュリティにも興味が出てきた。
ただ、まだまだ浅い理解しかない。
何が言いたいかというと、この記事は不確かな情報を含んでいる可能性があるということ。
浅く理解したくなったきっかけ
最近、個人開発ということでNestJS
でAPI
を作成した、
作成したAPI
をLambda
に乗せ、カスタムドメインを設定せずに使用している。
そのため、CORS
のクロスオリジンを指定する必要があった。
NestJS
は一行ですべてのドメインに対しCORS
を許可することができる。
開発環境ではそれでいいが、本番で運営するにあたり、許可するドメインを指定する必要がありそうだということを調べて知った。
しかし、なぜ? という疑問が生じた。
いくら絞ったところでcurl
コマンドで叩けるので別に絞る必要がないのでは?
という疑問を解決するために調べてみた。
CORSを指定しないことで考えられるセキュリティリスク
クロスサイトリクエストフォージェリ(CSRF)攻撃
CSRF
は悪意のある攻撃サイトにユーザーが訪問した際、意図しないリクエストがCSRF
の脆弱性のあるウェブアプリケーションに投げられ、設定の変更や、強制投稿が行われるということ。
CSRF(Cross-Site Request Forgery)攻撃について
このサイトが非常に参考になった。
CORSで防げる
このサイトにあげられている下記のようなポイントのうち、
対象のWebサイトのユーザが、正規の手順でログイン済であることを前提とする
対象のWebサイトが、設計上意図しない更新操作を受け付けてしまうことで攻撃が成立する
「対象のWebサイトが、設計上意図しない更新操作を受け付けてしまうことで攻撃が成立する」をCORS
の設定で防ぐことができる。
悪意のあるサイトのドメインがCORS
で許可されていなければ、いくらリクエストが飛ばされたところで問題ない。
そのため、CORS
のドメインは信頼されたドメインに絞り込む必要がある。
そういうこと。