
1. お問い合わせフォームのセキュリティ対策とは
お問い合わせフォーム(図1-1)より入力した情報(お名前、メールアドレス、題名、お問い合わせ内容)は、メール送信ボタンを押下することにより、同一ドメインにあるPHPのメール送信プログラムに引き渡され処理されます。
ただ、メール送信プログラムへのデータの引き渡しは、同一ドメインのお問い合わせフォームからではなく、やろうと思えば、他のドメインからでもできてしまいます。
このような、他のドメインから自サイトの処理プログラムにデータを送信して処理させるといった攻撃手法をクロスサイトリクエストフォージェリ(CSRF)といいます。
この記事では、お問い合わせフォームおよびメール送信プログラムにCSRF対策を実装する方法について説明します。
お問い合わせフォームの実装方法については、以下の記事をご覧ください。以下の記事では、固定のトークン認証により、特定フォームからの要求であることをチェックしています。しかし、セキュリティ的にはザルですので、本記事の対策を組み込むことで、お問い合わせフォームのセキュリティ強化につながると考えます。

2. CSRF対策の考えと行うべきこと
(2)なりすましによるメール送信プログラムへの要求をブロックするしくみであること
①自サイトのお問い合わせフォームページで、ランダムな文字列からなるトークンを発行する
②フォームに入力した内容が送信される際には①で発行したトークンもセットで送信されるようにする
③メール送信プログラムはトークンが自サイトで発行されたものかどうかをチェックする
④自サイトで発行されたトークンであればメール送信を行う
3. お問い合わせフォームのCSRF対策
CSRF対策のため追加した部分の説明(コード内番号)は、以下のとおりです。
②文字コードを指定:明示的に文字コード(utf-8)を指定
③クリックジャッキング対策:フレーム内のページ表示を同一ドメイン内のみ許可する指定
④疑似乱数のバイト文字列生成:openssl_random_pseudo_byte(16)関数により生成
⑤バイナリのデータを16進表現に変換:bin2hex()関数による変換
⑥生成したランダムな文字列をセッション変数に設定:$_SESSION[‘csrf_token’] に保存
⑦生成したランダムな文字列をトークン文字列に設定:入力データとして”php/mailer.php”に送る
1 |
4. メール送信プログラムのCSRF対策
これにより、なりすましによるメール送信プログラムへの要求をブロックすることができます。
②お問い合わせフォームから送られたトークン文字列とセッション変数に保存されているトークン文字列とを比較
一致 :メール送信処理を継続
不一致:メール送信処理を中止
1 |
5. まとめ
お問い合わせフォームは、実際にサイト閲覧者に対しメールを送信することになりますので、悪用されることがあってはなりません。セキュリティ強化のためにCSRF対策を検討されている方に、この記事がすこしでも参考となれば幸いです。

コメント