2013-07-24 88 views
0

我可能會用錯誤的方法解決這個問題。我有一個收集信息的PHP表單。提交後顯示驗證信息。然後,當您提交表單時,它將發送到另一個php腳本進行處理。如何將安全性添加到php表單

我想添加一個從表單傳遞給驗證表單的令牌/密鑰,以確保兩者仍然在我的網站上,然後從驗證表單到最終的php腳本進行處理。

這看起來像答案:How do I provide more security for checking source of the request

但我無法得到它的工作,我沒有足夠的信譽發表評論。因此,出於純粹的挫折,我在這裏張貼我作爲與我的問題重複。

回答說,在表單中使用此:

<?php 
    session_start(); 
    $csrfToken = md5(uniqid(mt_rand(),true)); // Token generation updated, as suggested by The Rook. Thanks! 

    $_SESSION['csrfToken'] = $token; 
?> 
<form action="formHandler.php"> 
    <input type="hidden" name="csrfKey" value="<?php echo $csrfToken ?>" /> 
</form> 

的這種形式的處理程序:

<?php 
    session_start(); 
    if($_POST['csrfKey'] != $_SESSION['csrfKey']) { 
     die("Unauthorized source!"); 
    } 
?> 

它不工作。我的問題是不應該$_SESSION['csrfToken'] = $token;$_SESSION['csrfToken'] = $csfrToken;

,不應if($_POST['csrfKey'] != $_SESSION['csrfKey'])if($_POST['csrfKey'] != $_SESSION['csrfToken'])

雖然我已經試過了,它並不能工作。

我完全喪失。

+0

是的,那些看起來像錯別字。更正之後,究竟「不起作用」? –

+0

這是這些拼寫錯誤和我在隱藏的輸入字段中使用回聲所需的特殊格式在我的表單中的組合。感謝您驗證我的想法是正確的。 –

回答

1

盪滌錯別字和名稱混,應該像這樣工作:

<?php 
session_start(); 
$csrfToken = md5(uniqid(mt_rand(),true)); 
$_SESSION['csrfToken'] = $csrfToken; 
?> 
<form action="formHandler.php"> 
<input type="hidden" name="csrfToken" value="<?php echo $csrfToken?>" /> 
</form> 

而且除了驗證所提交的數據時:

<?php 
session_start(); 
if($_POST['csrfToken'] != $_SESSION['csrfToken']) { 
    die("Unauthorized source!"); 
} 
?> 
+0

完美謝謝。 –