2013/12/03)ちょっと気になったので...記事はコラム形式だったので書いていないだけだと思いますが2つ問題があります。識別可能なフォームの数に限りがあるセッション変数を利用しているため変数名でフォームを識別する必要があり、ユーザが複数のフォームを利用した場合、正しく動作しない。この制限をなくす事もできますが、その場合セッション変数が大きくなりすぎた状態に対処するようにしないとならくなります。{unset($_SESSION['ticket']);セッション変数の状態チェックと状態の変更がアトミックに行えないため、稀なケースとは言えますが、レースコンディションにより2重送信の可能性があります。この様な変数の状態の確認と変更はアトミックな処理が必要になります。Webサーバが一つならセマフォを使えますが、複数のWebサーバを利用する場合、トランザクションをサポートしたDBサーバを利用します。(APサーバ間でトランザクション、と言う方法もありますがDBサーバを利用した方がスケーラブルです)私のPHPの本、セキュリティの本でもこの方法を2重送信・CSRF対策として紹介しています。完全なSQLインジェクション対策インジェクション攻撃は3種類あるそもそもエスケープとは何なのか?セキュアコーディングを理解できていない例2要素認証のTOTPとHOTP、どちらがより安全か?紹介エレクトロニック・サービス・イニシアチブのWebシステムのコンサルタントのブログです。PHPの開発、PHP4.x/5.xレガシーPHPセキュリティパッチサービスなどを行っています。ブログのサブタイトルを「書かない日記」としているのは、ブログを始めた時にあまり書かないつもりで始めたのでこのサブタイトルになっています。yohgaki@ohgaki.net私が記述したブログ中のコードは記載が無い場合はMITライセンスです。その他のコードは参考リンクなどのライセンス情報を参照ください。