訪問者の名前や住所をフォームに入力してもらい登録するページです。
以下の流れでセキュリティ的に問題はないでしょうか?
よろしくおねがいします。
・情報登録フォームページ
>HTTPSじゃなかったらリダイレクト($_SERVER['HTTPS']確認)
>キー(ランダムハッシュ値(MD5/32桁))を発行してクッキーに保存させる。
>キーをDBに保存する。PHPのMYSQL関数使用して、DBサーバー(https://xxx)へ登録。
>「確認」ボタンでフォームのsubmit。POSTで入力データを送信。
↓
・情報確認ページ
>クッキーのキーを取り出す。(※1)PHPのMYSQL関数使用して、DBサーバー(https://xxx)へ、キーを照合。照合できなければエラーページへ。
>POSTデータをhtmlspecialchars() する。
>内容が不正の場合(※2)データを、form.phpへPOSTしなおす。(フォーム上に再表示)
>HTML上に確認表示表示。
>「登録」ボタンでデータをPOST送信。
↓
・情報登録終了ページ
>クッキーのキーを取り出す。(※1)と同じ。
>POSTでデータを受け取る。
>データをhtmlspecialchars() する。
>内容が不正(※2)と同じ。
>PHPのMYSQL関数を使用して(この際に入力情報はサニタイズ)、DBサーバー(https://xxx)へ登録。
このような流れを考えていますが、ヌケはありますでしょうか。具体的に指摘していただければ幸いです。
また、セッションを使用しない前提なのでキー(クッキーとDB)を作成する形にしてありますが、よりシンプルな形があればご教受いただきたいです。
セッションを利用しないということはログオンさせた状態で会員に入力させるのではなく、単発でプロフィールを登録させるだけのページということになりますね。
そしたら、キーを作成して送り返させる目的は何でしょう。
リンクがHTTPSであり、お書きのようにXSS対策とSQLインジェクション対策がしてあれば、キーをやりとりしなくてもセキュリティ上の懸念はありません。
むしろ、form.phpに連続アクセスすることでDBをキーで溢れさせるDOS攻撃を許す原因になります。
セッションを利用しないということはログオンさせた状態で会員に入力させるのではなく、単発でプロフィールを登録させるだけのページということになりますね。
そしたら、キーを作成して送り返させる目的は何でしょう。
リンクがHTTPSであり、お書きのようにXSS対策とSQLインジェクション対策がしてあれば、キーをやりとりしなくてもセキュリティ上の懸念はありません。
むしろ、form.phpに連続アクセスすることでDBをキーで溢れさせるDOS攻撃を許す原因になります。
重複ラッシュはキー発行しててもわりと簡単で、ブラウザのウィンドウ2つ開いておけばできます。片方でform.phpをリロードし、もう片方でregister.phpを叩くだけなんで。
同一のブラウザからの登録ラッシュを簡易的に防ぐなら、単に「もう登録したよ」というCookieをregister.php成功時に送り込むだけで十分ですね。
この方法はCookie受入がオンの場合にしか効果がないんですが、最初のご質問の手法だと防止効果どころかそもそもCookieがオフだと動作しません。
度々の回答ありがとうございます。
CookieはONの想定です。
重複ラッシュ防止もCookieで対応しようかと思いました。
重複ラッシュはキー発行しててもわりと簡単で、ブラウザのウィンドウ2つ開いておけばできます。片方でform.phpをリロードし、もう片方でregister.phpを叩くだけなんで。
2012/08/23 00:48:40同一のブラウザからの登録ラッシュを簡易的に防ぐなら、単に「もう登録したよ」というCookieをregister.php成功時に送り込むだけで十分ですね。
この方法はCookie受入がオンの場合にしか効果がないんですが、最初のご質問の手法だと防止効果どころかそもそもCookieがオフだと動作しません。
度々の回答ありがとうございます。
2012/08/23 16:05:26CookieはONの想定です。
重複ラッシュ防止もCookieで対応しようかと思いました。