- ベストアンサー
セッションのワンタイムチケット法とは?
- セッションのワンタイムチケット法は、ウェブアプリケーションのセキュリティ強化のために使用される方法です。
- この方法では、ユーザーごとに一意のチケットを生成し、セッションに保存します。
- フォームなどでデータを送信する際には、このチケットをhiddenフィールドなどで送信し、受け取った側でチケットの正当性を検証します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ソースコードを見るかぎり、$ticketの値は暗号的な強度のある乱数なのでソースコードをいくら確認した所でその値はわかりません。mt_randとuniqidのマニュアルを確認してみてください。 PHPのversion 4.2.0以降だとmt_randは自動的にシードされます。よって、mt_randの結果はたとえ初めて実行したとしても毎回違う値が返ってきます。また、uniqidでマイクロ秒単位の現在時刻に基づき、mt_randが作った乱数を頭に持つユニークなIDを作っています。つまり、この時点でmt_randの乱数+その他のエントロピーが入ったマイクロ秒を元にしたIDとなっており、予測が難しい値になっています。これをMD5でハッシュ値をとっているので次にどんな値が$ticketに入るかを推測することは非常に困難です。 というわけで、ソースコードを読んだら暗号強度のある乱数値が$ticketに入っていることはわかりますが、具体的に何の値が入っているかはまず予測できないことがわかります。惜しむらくは強衝突耐性が疑われているMD5ではなく、SHA256あたりを使うと更に強い$ticketになると思います。
その他の回答 (2)
- shimix
- ベストアンサー率54% (865/1590)
ANo.1さんに補足 ブラウザからticketとセッションID(Cookie)が送られますよね。受け取ったサーバは、POSTで送られてきたと、セッションIDで紐付いているセッション変数のticketを照合します。 #ここで大事なのは、ticketが「ワンタイム」ということです.。 照合して処理が終わったら、$_SESSION['ticket']はクリアしますし、次にticketが必要な局面では別の値が再発行されます。 なのでticketだけを取り出して悪用しようとしても、その時点でのセッション変数のticketはすでに存在しないか他の値になっているので照合で不一致になります。
- yambejp
- ベストアンサー率51% (3827/7415)
>hiddenで渡したとしても そのチケット自体は公開キーみたいなもんでしょ。 かりにhiddenのデータを取得して、別のところで使おうとしても その時には別のチケットが発行されているので問題ないのでは? かりそめにセッションのチケットと、ポストされたチケットが その時だけあえばいいのだから 結局セッションidだってクッキーやなにやらで読もうとすれば よめるのだから、同じことでしょ?