ワンタイムトークン機能(v4.2.7~)
メールフォームプロにクロスサイトリクエストフォージェリ攻撃への対策の一環としてワンタイムトークン機能を実装しました。メールフォームプロは元々クロスサイトリクエストフォージェリ攻撃をしづらい仕組みになっているので、こちらは標準で有効になっておりません。
クロスサイトリクエストフォージェリ攻撃というのがありまして、リンクや偽装サイトなどから攻撃を行う事ができるたぐいの攻撃なのですが、それに対するやや強めの対策としてワンタイムトークン機能というものを実装しました。
仕組み
- フォームにアクセスした際にトークンを発行(Javascript経由で発行する)
- フォーム送信時に発行したトークンが有効かどうかをチェック
- 有効なトークンであれば送信。そうでなければエラー
という単純な仕組みになっております。
仕組み上、迷惑メール対策にもなるので迷惑メールがうるさいぞー!という人がもしおりましたらこちらの機能を有効にしてみてください。
設定方法
ワンタイムトークンをフォーム画面で発行(見えませんが)し、フォーム送信時にそれを照会することでクロスサイトリクエストフォージェリ対策と迷惑メール対策を行うための機能です。
- config.cgiを編集し、push @Modules,'onetimetoken';を有効にします。
- configs/onetimetoken.cgiを編集しトークンのキーや有効期限などを設定します。
- これで作業は完了です。
コメント欄
設置方法を拝見し、ワンタイムトークン機能を有効にし、フォームページからすぐに送信テストをおこなったのですが、「トークンの有効期限が切れています。<br>The token has expired.」と表示され、送信ができません。
configs/onetimetoken.cgi にてトークンのキーを4桁の番号に変更しました。
考えうる問題点や解消方法をご教示いただけますと幸いです。
よろしくお願いいたします。
/data/onetimetoken/ というフォルダにトークンファイルが生成されていなかった場合、トークンファイルの生成に失敗している可能性があるため、パーミッションをご確認ください。