PHPでセキュアな個人情報登録フォームを作ろうと思っています。(SSL/PHP/セッション不使用)

訪問者の名前や住所をフォームに入力してもらい登録するページです。
以下の流れでセキュリティ的に問題はないでしょうか?
よろしくおねがいします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/08/29 16:05:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:mihon6633

・情報登録フォームページ

https://ooo/form.php

>HTTPSじゃなかったらリダイレクト($_SERVER['HTTPS']確認)

>キー(ランダムハッシュ値(MD5/32桁))を発行してクッキーに保存させる。

>キーをDBに保存する。PHPのMYSQL関数使用して、DBサーバー(https://xxx)へ登録。

>「確認」ボタンでフォームのsubmit。POSTで入力データを送信。

・情報確認ページ

https://ooo/check.php

>クッキーのキーを取り出す。(※1)PHPのMYSQL関数使用して、DBサーバー(https://xxx)へ、キーを照合。照合できなければエラーページへ。

>POSTデータをhtmlspecialchars() する。

>内容が不正の場合(※2)データを、form.phpへPOSTしなおす。(フォーム上に再表示)

>HTML上に確認表示表示。

>「登録」ボタンでデータをPOST送信。

・情報登録終了ページ

https://ooo/register.php

>クッキーのキーを取り出す。(※1)と同じ。

>POSTでデータを受け取る。

>データをhtmlspecialchars() する。

>内容が不正(※2)と同じ。

>PHPのMYSQL関数を使用して(この際に入力情報はサニタイズ)、DBサーバー(https://xxx)へ登録。

このような流れを考えていますが、ヌケはありますでしょうか。具体的に指摘していただければ幸いです。

また、セッションを使用しない前提なのでキー(クッキーとDB)を作成する形にしてありますが、よりシンプルな形があればご教受いただきたいです。

ベストアンサー

id:Sampo No.1

回答回数556ベストアンサー獲得回数104

ポイント100pt

セッションを利用しないということはログオンさせた状態で会員に入力させるのではなく、単発でプロフィールを登録させるだけのページということになりますね。

そしたら、キーを作成して送り返させる目的は何でしょう。
リンクがHTTPSであり、お書きのようにXSS対策とSQLインジェクション対策がしてあれば、キーをやりとりしなくてもセキュリティ上の懸念はありません。

むしろ、form.phpに連続アクセスすることでDBをキーで溢れさせるDOS攻撃を許す原因になります。

他1件のコメントを見る
id:Sampo

重複ラッシュはキー発行しててもわりと簡単で、ブラウザのウィンドウ2つ開いておけばできます。片方でform.phpをリロードし、もう片方でregister.phpを叩くだけなんで。

同一のブラウザからの登録ラッシュを簡易的に防ぐなら、単に「もう登録したよ」というCookieをregister.php成功時に送り込むだけで十分ですね。

この方法はCookie受入がオンの場合にしか効果がないんですが、最初のご質問の手法だと防止効果どころかそもそもCookieがオフだと動作しません。

2012/08/23 00:48:40
id:mihon6633

度々の回答ありがとうございます。
CookieはONの想定です。
重複ラッシュ防止もCookieで対応しようかと思いました。

2012/08/23 16:05:26

その他の回答0件)

id:Sampo No.1

回答回数556ベストアンサー獲得回数104ここでベストアンサー

ポイント100pt

セッションを利用しないということはログオンさせた状態で会員に入力させるのではなく、単発でプロフィールを登録させるだけのページということになりますね。

そしたら、キーを作成して送り返させる目的は何でしょう。
リンクがHTTPSであり、お書きのようにXSS対策とSQLインジェクション対策がしてあれば、キーをやりとりしなくてもセキュリティ上の懸念はありません。

むしろ、form.phpに連続アクセスすることでDBをキーで溢れさせるDOS攻撃を許す原因になります。

他1件のコメントを見る
id:Sampo

重複ラッシュはキー発行しててもわりと簡単で、ブラウザのウィンドウ2つ開いておけばできます。片方でform.phpをリロードし、もう片方でregister.phpを叩くだけなんで。

同一のブラウザからの登録ラッシュを簡易的に防ぐなら、単に「もう登録したよ」というCookieをregister.php成功時に送り込むだけで十分ですね。

この方法はCookie受入がオンの場合にしか効果がないんですが、最初のご質問の手法だと防止効果どころかそもそもCookieがオフだと動作しません。

2012/08/23 00:48:40
id:mihon6633

度々の回答ありがとうございます。
CookieはONの想定です。
重複ラッシュ防止もCookieで対応しようかと思いました。

2012/08/23 16:05:26

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません