2012-03-09 5 views
2

私はPHPでサイトを作成しています。 私は簡単な登録フォームを持っています。隠し入力(html形式の確認) - サーバー側のスクリプトですか? (PHP)

私は確認フィールドを追加したい
<form> 
<label...></label> <input .../> 
</form> 

<input type='hidden' name='hiddeninput' value="jn3kjnv3kjvn35"> 

しかし、どのようにこのコードは、サーバー側で見えますか? 登録フォームが読み込まれるたびにデータベースにすべての隠し値を保存する必要がありますか?

フォームがボットで埋められていないことを確認しようとしています。

私はすべてのフォーム提出に固有のランダムな隠し値が必要なのです。

登録ページを生成するたびに、「非表示」フィールドの一意の値が生成されるとします。

ユーザーがフォームを送信したとき - 送信された値を生成された値と比較するにはどうすればいいですか(生成されるとサイトのどこにも保存されません)。

+0

また、非表示のフィールド名も指定する必要があります。 – j08691

+0

"登録フォームが読み込まれるたびにデータベースにすべての隠し値を保存する必要はありますか?" - それはあなたが達成しようとしているものに依存します。 –

答えて

0

do.php。

+0

これは答えではありません。あなたがあなたの質問を更新しない限り、別のフレームワークを使い始めたとしても、既に受け入れられている回答をしないようにマークし、あなた自身の答えを受け入れるのは適切ではありません。 –

+0

まあ、私は答えを探すときに、誰かがRuby on Railsについて実際に教えてくれることを望みます。あなたのような答えのために、私は最終的にRailsが見つかるまで、あらゆる可能なフレームワークについての本を読むのに多くの時間を費やしました。さらに重要なことは、あなたの答えはMVCの規約に従わないということです。そう...ええ。私は人々がこの質問を読んだときに、あなたの答えに従うよりもRailsに切り替えることができ、車輪を作り直してCSRFトークンを手動で作成することができることを知っている方が役に立つと思います。 –

0

フィールドにも名前を追加する必要があります。他のHTMLフィールドとほとんど同じように動作します。

1

基本的には、ランダムな文字列(hashなど)を生成する関数 とsessionsを使用して、この文字列を「記憶」する必要があります。 フォームを提出すると、INPUTの値をチェックし、SESSIONの値と交差させます。例えば

Form.php

<?php 
$hash = md5(time()); 
$_SESSION['form_xx'] = $hash; //in case you have more than one form. 
?> 
<form method='post' action='do.php'> 
.. 
.. 
<input type='hidden' name='secret_key' value='<?=$hash?>'> 
</form> 

私は今、箱から出して、それを解決Ruby on Railsフレームワークを使用

if($_POST['secret_key'] == $_SESSION['form_xx']) //Just make sure your making the posted value SAFE 
//He's ok. 
else 
die("arggg...those hackers"); 
関連する問題