Web Application
※今後はクロスサイトリクエストフォージェリー(CSRF, XSRF) | セキュリティゆいがどくそん
にて記事を更新します…
クロスサイトリクエストフォージェリ
その名のとおり、サイトを跨って(クロスサイト)ユーザの要求(リクエスト)を偽装(フォージェリ)する攻撃手法です。
IT:セキュリティ用語事典[クロスサイトリクエストフォージェリ(CSRF)]
より引用
想定していない外部のサイトからのHTTPリクエストにより、本来拒否すべき処理が実行させる攻撃。例えばログイン認証が必要な掲示板や日記サービスに対して、別のWebサイトに用意されたリンクをクリックすることで、掲示板への投稿や退会処理など、正規のアカウントでログインを行わなければできないような処理が実行されてしまう。
対策
- サーバのセッションに紐付くトークンを使用する。
セッション管理と無関係な文字列では意味が無いということです。
- 実装例(「入力」→「完了」という処理フローの場合)
- Webアプリケーションがサーバ側で管理するセッション情報に推測困難な文字列(トークン)を記録しておく。
- ブラウザが入力画面を表示するリクエストをWebアプリケーションに送信する。
- Webアプリケーションは、ブラウザへのレスポンスにトークンを含ませる。
※必ずしもアクセスのたびに異なるトークンを生成する必要はありません。セッション単位で一意なトークンでもCSRF対策は可能です。
- ユーザが入力画面のフォームに値を記入してWebアプリケーションに送信する。
送信データにはトークンも含むこと。
- ユーザからのリクエストを受信したWebアプリケーションは、リクエスト内のトークンとサーバ側のセッション情報に記録したトークンが一致しているかどうかを検証する。
一致している場合は正常なリクエストであるため、送信されたパラメータを処理した後、完了画面をブラウザに返す。
一致していない場合は不正なアクセスとみなして処理を中断*1する。
- 再認証する。
重要な処理の直前にユーザを再認証するのが、アカウント情報を奪われない限りにおいては安全確実です。
ここで、ユーザIDやパスワードが脆弱*2であったり、再認証画面に総当り攻撃*3防止機能が無かったりすると意味がありません。
参考