どうもシローです。
今回はセキュリティ攻撃の一種である”CSRF攻撃”について紹介します。
CSRF攻撃とは?
”CSRF攻撃”とは(Cross Site Request Forgeries : クロスサイトリクエストフォージェリ)の略です。
はい。
要は"全く関係のないWebページから意図しないリクエスト"を送信する攻撃です。
この問題は、サーバーが受け取るリクエストを正しいものかをキチンと判別できていないことが原因で起こりえます。
具体例
例えば、あなたがSNSを利用して日々の日記を書き込むとしましょう。「今日も仕事疲れたー」みたいな
そこで、CSRF攻撃を仕掛ける悪い人があなたに悪さをして攻撃用のサイトにアクセスさせます。
その攻撃用サイトには悪いプログラムが仕掛けられていて、例えば、「〇〇(有名な人とか)を殺します!!」とかヤバイメッセージを投稿させるようになっています。
そうすると、あなたは意図していないのに、危険な投稿をしたことになってしまうのです。
防ぐためにはワンタイムトークン
CSRF攻撃を防ぐためには”ワンタイムトークン(CSRFトークンとも呼ばれる)という、アクセスした時点でのユーザーしかわからない秘密の文字列をフォームを送信する前に発行することが効果的です。
ワンタイムトークンはブラウザでアクセスする度に毎回新しいものが発行されるので、攻撃者に特定されるのは非常に困難です。
このトークンを記事の投稿や削除処理をおこなう時に同時にサーバーに送って、サーバーはトークンが正しいものと判別できると処理を正常に行います。
Webフレームワークにはこの仕組みをデフォルトで組み込んでいるものがありますが( Laravelなど)、念の為、CSRF攻撃対策に対応しているかを確認しておくことをおすすめします。
攻撃者はワンタイムトークンを持っているはずがないので、ユーザーに成り代わって意図しない投稿や削除などを行おうとすると、サーバーにトークンを持っていない(あるいは正しくない)と判別されて攻撃を阻止されます。
よって、ユーザーがフォーム入力を行うアプリケーションでは、ちゃんと操作した人が本人であることを紐付けるワンタイムトークンを発行して判別させることを推奨します。