我試圖通過在每一個上生成一個唯一的標記來確保我的表單不受CSRF攻擊。我有一個生成一個獨特的標記,像這樣我的窗體上的隱藏字段:如何將一個PHP表單上生成的令牌傳遞給處理它的表單?
public static function generateToken() {
return $_SESSION['token'] = md5(uniqid(mt_rand(), TRUE));
}
我知道,MD5被貶值,不應該被使用,因爲它不是像隨機:
base64_encode(openssl_random_psuedo_bytes(32));
但我目前沒有安裝ssl,我會照顧這個。但我的主要問題是,產生此標記後存入會話,用戶目前在像這樣:
$_SESSION['token'] = $_POST['token'];
它吸引的是在它生成的令牌中的字段的值。現在我將這個令牌存儲到會話中,我需要弄清楚將它發送到處理文件。我在這個表格中有很多字段,因此在一個if()
聲明中檢查每個單詞都會顯得有點奇怪。我想我想說的是,如何在處理數據的表單上檢查此令牌,並且如果令牌與表單上生成的令牌不相同,我是否可以拒絕該數據?只需使用die()
殺死處理腳本?
我也想知道如果我甚至需要這樣做 - 我已經閱讀了CSRF,但我想最糟糕的人可以做的是改變一些正在發送的信息處理,這就是爲什麼我'想要通過令牌來檢查和拒絕數據是發生這種情況。
<form name="form1" action="processing.php" method="POST" enctype="multipart/form-data">
這就是我所說的其他文件。 PHP不是都在一個地方,我通過$ _POST方法獲取處理腳本中的所有內容。
我們需要生成它的令牌存儲在會話,也具有相同價值形態有場呼應的是說。當表單被提交時,我們需要檢查/比較我們在會話中保存的值,以驗證我們呈現的表單是否僅提交,但不是來自不同網站的某些隨機表單提交給我們的網站。 – Sunand 2014-09-22 19:40:23