CSRF
webサイトの脆弱性を狙ったサイバー攻撃の一種
※脆弱性とはプログラムの不具合や設計ミスにより発生したセキュリティ上の欠陥
ログイン状態を維持したまま「悪意のある攻撃者」が容易した罠サイトのボタンやリンクをクリックすることで、利用者の意図しない形でリクエストを送られてしまう攻撃
通常の会員サイト(ログイン)
table: 通常
クライアント サーバー
IDとパスワードを入力してログイン
正しければ セッションIDをクライアントに返却
cookieにセッションIDを保存
カートに入れて購入する時などにセッションIDをサーバーに送る
ログイン済みのユーザーかどうかをセッションIDで判断
ログアウトの時はセッションIDをサーバーに送る
サーバーがセッションIDを削除
https://scrapbox.io/files/65e3dd4857472d002318d744.png
table: scrf発生の流れ
クライアント サーバー
IDとパスワードを入力してログイン
正しければ セッションIDをクライアントに返却
table: ここから問題発生
クライアント 罠サイト 正規サーバー
ログイン状態のまま、
悪意ある攻撃者が容易した
罠サイトにアクセスし、
ボタンやリンクをクリック
正規のサイト宛にアクセス ->
クライアントのセッションIDが
正規のサイトに送られる
※ログイン状態のままなので、
Cokkieで保持しているセッションIDが
自動的に送信
不正なリクエストかどうか判断できない
その結果、利用者の意図しない操作(退会、入金)などが実行されてしまう
https://scrapbox.io/files/65e3dda2f76f160025d1e028.png
https://scrapbox.io/files/65e3ddba30648f0025c37184.png
占い開始ボタンをクリックすると
https://scrapbox.io/files/65e3ddba30648f0025c37184.png
罠サイトのformタグの送信先は正規のサイトと同じ宛先
hiddenで不正な金額と口座番号を保持しているので、送信すると、利用者の意図しない口座番号などが送られてしまう。
https://scrapbox.io/files/65e3de3451b39a0023e7f7f3.png
## CSRFの対策
サーバー側は機密情報を保持している。
クライアントからの画面表示依頼の段階で、機密情報を作成し、隠し持っている
サーバー:機密情報を作成してクライアントに送る
クライアント:サーバーにアクセスする際に、機密情報+セッションIDをサーバーに送る
機密情報は暗号化されている。
占いサイトからpostリクエストが投げられた場合は、機密情報がないので、正規の画面から来ていないことがわかる(リファラーを使うことで直前のページのURLがわかる。)
機密情報とセッションIDを照らし合わせる。
https://scrapbox.io/files/65e3deb9d3efc7002405a13a.png