はじめに
こんにちは。ブレーン・アシストでWebアプリの開発業務を担当しているものです。
今回はWebアプリケーションに代表的な攻撃として知られているCSRF攻撃についてと、その対策法についてお話していきます。よろしくお願いします。
CSRF攻撃とは
情報処理推進機構では以下のようにご説明しています。
※1 情報処理推進機構 安全なウェブサイトの作り方 – 1.6 CSRF(クロスサイト・リクエスト・フォージェリ)より
一体どういうことなのか。具体例を示し詳しく説明していきます。
下記のようなパスワード変更画面を想像してください。
ここの入力項目に値をいれて変更ボタンを押すと入力した値にパスワードを変更することができます。
変更後、下記のように完了画面が表示されます。
データベースを確認するとパスワードを確認することができます。
ここでこのウェブサイトを攻撃してみましょう。下記のような悪意あるサイトを用意します。
変更ボタンを押すと攻撃用のパスワードを送信して変更をおこないます。
同じように完了画面が表示されました。
データベースを確認するとパスワードが「hello」に変更されていました。
なぜ変更できてしまったのでしょうか。それはこのWebサイトが「利用者が意図したリクエストであるかどうかを識別する仕組みを持たないウェブサイト」だからです。
今回の場合、悪意あるサイトから正規のリクエストを偽って送信しました。サーバー側ではそのリクエストが正規なものか悪意のものか識別することができず処理してしまったので変更が可能になっていたのです。このような攻撃をCSRF攻撃といいます。(CSRF≒別サイトからのリクエスト攻撃)
トークンの発行
このCSRF攻撃を防ぐ代表的な方法としてトークンの発行が挙げられます。
サーバーにリクエストを送信する際にトークンを一緒におくり、サーバーに保存してあるトークンが一致していた場合のみ処理をおこなうことで悪意あるサイトからのリクエストを防ぐことができます。
先ほどのWebサイトに実装してみます。プログラムコードは省きます。
同じように攻撃をおこなったらエラーページに飛びます。
さいごに
今回はCSRF攻撃のみの紹介でしたが、ほかにもいろいろな攻撃があります。普段使用しているWebサイトのセキュリティに興味を持っていただけたら筆者としては幸いです。
最後まで読んでくださりありがとうございました。
参考文献
情報処理推進機構 安全なウェブサイトの作り方 – 1.6 CSRF(クロスサイト・リクエスト・フォージェリ)
https://www.ipa.go.jp/security/vuln/websecurity/csrf.html