メールフォームのセッションID(トークン)によるセキュリティ
メールフォームを設置すると、自分のメアドを使わずにメールを送れるのでスパムメールやメール攻撃の踏み台になり易いです。
そういう時には、セッションIDを使ってトークンとして使う方法があります。
トークンは「カケラ、券、切符」という意味です。識別するためのIDですね。
セッションは「集まり、集会」という意味です。ブラウザはページを開いてから閉じるまで、同一のセッションIDを持っています。
HTMLのformでは、action先が同じドメイン内でなくてもいいのでローカルHTMLファイルでも送信出来てしまいます。ループで大量にSUBMITされる危険性があります。
それを防ぐためには、formに以下の様な項目を追加します。
1 |
echo '<input type="hidden" name="token" value="'.htmlspecialchars(session_id(), ENT_COMPAT, 'UTF-8') . '">'; |
そして、POST先には以下のような記述をします。
1 2 3 4 5 6 7 8 9 10 11 |
//セッションIDをトークンとして利用する。 $token = isset($_POST['token'])?$_POST['token']:""; session_start(); //トークンが異なっていたら弾く if(session_id() !== $token){ exit(); } //トークンをパスしたら、新しいセッションID(トークン)を発行する。 session_regenerate_id(TRUE); |
またGoogle Chromeではブラウザを閉じてもセッションIDが維持されてしまう!ので、明示的にsession_regenerate_id(TRUE)でセッションIDを更新します。
以上のようにすれば、外部からのPOSTは防げます(CSRF対策にもなる)