メールフォームのセキュリティについて、CSRF対策に関する覚え書き。
CSRF (Cross Site Request Forgeries) とは
超簡単に言うと「自サイトのフォームを他サイトからキックされる」こと。これを許すと悪用されるリスクが高まる。CSRFの詳細については以下サイトなど参照。
IPA ISEC セキュア・プログラミング講座:Webアプリケーション編 第4章 セッション対策:リクエスト強要(CSRF)対策
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/301.html
CSRF対策
CSRF対策の基本は、「サーバーがフォームのサブミットを受信したとき、それが自分が生成したフォームからのモノであるかどうかを確認する」こと。具体的には、自分がフォームを生成するときにはトークンを埋め込んでおき、フォームを受信したときにそのトークンが存在するかどうかを確かめればよい。
トークンにはセッションIDが使われることがある。
メールフォームのセッションID(トークン)によるセキュリティ | メサイア・ワークス
http://www.messiahworks.com/archives/2559
しかし、セッションIDの安全性が担保できないという議論もある。
CSRF の安全なトークンの作成方法 | Webセキュリティの小部屋
http://www.websec-room.com/2013/03/05/431
CSRF の安全なトークンの作成方法(PHP編) | Webセキュリティの小部屋
http://www.websec-room.com/2013/03/05/443
擬似乱数によるトークンを使ったサンプルは以下。
PHP – とっても簡単なCSRF対策 – Qiita
http://qiita.com/mpyw/items/8f8989f8575159ce95fc
以下ページにもトークンの安全性に関するコメントがある。
PHPでクロスサイトリクエストフォージェリ(CSRF)対策するときのメモ – Qiita
http://qiita.com/yoh-nak/items/c264d29eb25f4df7f19e