CSRF

CSRFを簡単に言うと、ユーザー情報を盗み取り、アカウントを使って悪さすることだ。正規のサイトをA、攻撃用のサイトをBとする。ログイン中のユーザーがAと見た目が同じBにアクセスし、Aに向けて何かしらリクエストを送った場合、Aが「ログイン中かつPOSTをした」ということしかチェックできなければ、不正アクセスを許し結果としてユーザー情報をBに抜き取られてしまう。
対策としては、そのページから送られたということを確かめることができればいい。

CSRF(クロスサイトリクエストフォージェリ) | PHPの入門・リファレンス

CSRF・・・ユーザの意図しない操作を、そのユーザの権限で実行させる不正です。例えばログインしないと実行できない操作があったとして、それらの操作を不正に"そのユーザに"実行させてしまう攻撃です。意図しない商品購入、退会処理、不正投稿などの被害が考えられます。
対策・・・秘密情報を使用し、正規のリクエストかどうかチェックをすることで防ぐことができます。
 上記の例に対して対策を行うこととし、具体的な手順を示します。正規のページでは、"post"の送信と共に、hiddenで秘密情報を送信させます。そしてその秘密情報はセッションでサーバ側でも管理し、リクエストにこの秘密情報が正しく含まれている場合にのみ処理を実行するようにします。この秘密情報をランダム文字列で生成すれば、サーバ側、ユーザしか知り得ない情報のため、攻撃者は推測することができません。秘密情報はセッションIDや、別のIDを任意に生成するなど方法はいくつかありますが、必要なのは攻撃者が予測できない文字列であることです。(ワンタイムトークンを用いた対策例が多く紹介されていますが、必ずしもワンタイムである必要はないと思います。)

build-web-application-with-golang/09.1.md at master · astaxie/build-web-application-with-golang · GitHub

www.slideshare.net

http://www.websec-room.com/2013/03/07/479

[PHP] メールフォームのCSRF対策 – 端くれプログラマの備忘録

CSRF対策の基本は、「サーバーがフォームのサブミットを受信したとき、それが自分が生成したフォームからのモノであるかどうかを確認する」こと。具体的には、自分がフォームを生成するときにはトークンを埋め込んでおき、フォームを受信したときにそのトークンが存在するかどうかを確かめればよい。

クロスサイトリクエストフォージェリ(CSRF)[トークン][PHP]

dotinstall.com

dotinstall.com