2012-03-09 83 views
2

我正在用PHP寫一個網站。 而且我有一個簡單的註冊表格。隱藏輸入(html表單確認) - 服務器端腳本? (php)

<form> 
<label...></label> <input .../> 
</form> 

我想添加一個確認字段:

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

但如何做到這一點的代碼看看服務器端? 每次加載註冊表單時,是否需要將每個隱藏值保存到數據庫?

我試圖確保表單沒有被機器人填寫。

這就是爲什麼我需要一個隨機的隱藏值,每個表單提交都是唯一的。

假設每次生成註冊頁面 - 我生成「隱藏」字段的唯一值。

當用戶提交表單時 - 如何將提交的值與生成的值進行比較(因爲一旦生成 - 它不會存儲在站點的任何位置)。

+0

您還需要提供隱藏的字段名稱。 – j08691 2012-03-09 20:56:12

+0

「加載註冊表單時,是否需要將每個隱藏值保存到數據庫?」 - 這取決於你想要完成什麼。 – 2012-03-09 20:58:52

回答

0

我現在用Ruby on Rails框架,解決它的開箱。

+0

這不是一個答案。即使你開始使用不同的框架,除非你會更新你的問題,將一個已經接受的答案標記爲「不」並且接受你自己的答案是不合適的行爲。 – 2017-11-07 13:26:39

+0

嗯,我希望當我找到答案時,有人實際上告訴我關於Ruby on Rails。由於像你這樣的答案,我花了很多時間閱讀關於每個可能框架的書籍,直到我終於找到Rails。更重要的是,你的答案不遵循MVC約定。嗯是的。我認爲當人們閱讀這個問題時,讓他們知道他們可以切換到Rails,而不是按照您的回答來嘗試重新發明輪子並手動創建CSRF令牌。 – 2017-11-07 14:12:23

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> 

do.php

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