目的
CSRFについて理解を深める。
目次
はじめに
今回は、投稿やメールの送信、商品購入など、本来外部より実行されてはいけない重要な処理に対してのセキュリティ攻撃について理解を深めていきます!
CSRFとは
CSRF
とは、攻撃者がユーザーのログイン情報を盗み出すなど、正規利用者になりすましてリクエストを送る攻撃のこと指します。
なりすましのリクエストは不正なリクエストであり、この不正なリクエストを判別できないWebアプリケーションは、CSRF
の脆弱性があると言えます。CSRF
の脆弱性が存在すると、主に以下のような被害を受ける可能性があります。
- 利用者アカウントが不正利用される
- 利用者のパスワードやメールアドレスが変更される
- 利用者の所持している金銭が利用される
CSRF
は下記のような仕組みで行われます。
- 攻撃者は、ユーザーの情報を盗み出す悪意のあるWebサイトを用意する
- ユーザーが脆弱性のあるWebアプリケーション上でログインした状態で、悪意のあるWebサイトのリンクをクリックする
- 攻撃者は抜き出したログイン情報をもとに、脆弱性のあるWebアプリケーションへ不正なリクエストを行う
CSRFの対策
CSRF
はサーバーサイド側の脆弱性であり、Webアプリケーションのサーバーサイドにおいて受け取るリクエストへの対策をする必要があります。
重要なのは、どのリクエストに対して脆弱性対策が必要なのかを知ることです。CSRF対策はすべてのリクエストに行う必要はありません。
具体的には、HTTPメソッドがPOSTやDELETEなどの、データベースの情報を書き換えるためのリクエストに対策が必要となります。
具体的な対策法としては以下のような方法が挙げられます。
- パスワードの再入力
- リクエストへのトークン埋め込み
パスワードの再入力
この対策法は重要な処理が確定する前に、再度パスワードを入力してもらうというものです。
これはCSRF対策の他にも、利用者の意思の念押しをしたり、共用のPCにおいて正規の利用者以外の利用者が、重要な処理を実行するのを防いだりする効果があります。
パスワード変更に関わるリクエストにも、現在のパスワードを再入力させることによりCSRF攻撃を防ぐことが可能です。
リクエストへのトークン埋め込み
この対策法は、登録画面や注文確定画面などのCSRF対策が必要なページに対して、攻撃者が知り得ないトークンを要求するようにするというものです。
これにより、不正リクエストによる重要な処理が実行されることはありません。
トークン
トークンとは、1度だけ使用可能なパスワードのことです。ユーザーの認証などに用いられるケースが多くあります。
このトークンは、ユーザーのブラウザ上のみに保管されるものになります。