人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでセキュアな個人情報登録フォームを作ろうと思っています。(SSL/PHP/セッション不使用)
訪問者の名前や住所をフォームに入力してもらい登録するページです。
以下の流れでセキュリティ的に問題はないでしょうか?
よろしくおねがいします。

●質問者: mihon6633
●カテゴリ:インターネット
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から

・情報登録フォームページ
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)を作成する形にしてありますが、よりシンプルな形があればご教受いただきたいです。


1 ● Sampo
●100ポイント ベストアンサー

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

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

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


mihon6633さんのコメント
回答ありがとうございます。 はい、ログイン機能とかではなく、単発の登録になります。 キーは、フォームを経ずに”https://ooo/register.php”などへ直接アクセスすることでDOS攻撃のように重複登録を行なわせるのを防ぐために設けました。 ※上記流れに書き漏らしていましたが、DBへデータ登録成功した時点でキーは消します。 ※また、ご助言通りキーで溢れるのを防止するため、キーの生存時間を設けたいと思います。 これでどうでしょうか? (もしかしてキーの仕組みが無くても重複登録は防げますでしょうか…?)

Sampoさんのコメント
重複ラッシュはキー発行しててもわりと簡単で、ブラウザのウィンドウ2つ開いておけばできます。片方でform.phpをリロードし、もう片方でregister.phpを叩くだけなんで。 同一のブラウザからの登録ラッシュを簡易的に防ぐなら、単に「もう登録したよ」というCookieをregister.php成功時に送り込むだけで十分ですね。 この方法はCookie受入がオンの場合にしか効果がないんですが、最初のご質問の手法だと防止効果どころかそもそもCookieがオフだと動作しません。

mihon6633さんのコメント
度々の回答ありがとうございます。 CookieはONの想定です。 重複ラッシュ防止もCookieで対応しようかと思いました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ