<?php
$_SESSION['csrf_token'] = md5(uniqid(rand(), true));
?>
<?php
$csrf1 = $_POST['csrf_token'];
$csrf2 = $_SESSION['csrf_token'];
if($csrf1 === $csrf2) {
//not executing
} else {
}
?>
的JavaScript反CSRF無法正常工作
var csrf = "<?php echo $_SESSION['csrf_token']; ?>";
var ajax = ajaxObj("POST", "index.php");
ajax.onreadystatechange = function() {
if(ajaxReturn(ajax) == true) {
if(ajax.responseText != "success"){
} else {
window.location.replace("login.php");
}
}
}
ajax.send("csrf_token="+csrf);
}
return false;
所以,這裏是從我的代碼一些PHP生成一個CSRF令牌,將其放在會議,然後檢查會話值和POST值是否一樣。問題是,if語句沒有執行。在我使用ajax發送請求之前,當我回顯會話令牌時,會話令牌是相同的。我確信會話令牌正在改變,我不確定原因。
編輯:我添加了我的javascript。我從中刪除了很多,所以我希望我沒有把它搞亂。
這段代碼是在一個單獨的PHP文件中(所以上面的所有代碼都會被執行)?如果是這樣,那麼'$ _POST ['csrf_token']'應該從哪裏來? – ComFreek
除了@ ComFreek的評論,我們需要更多的代碼才能找出發生的事情。如果您可以發佈您提交此表單的代碼以及任何其他相關代碼,那麼我們可以幫助我們找到根本原因 –
您是否在每個請求中更新'$ _SESSION ['csrf_token']' ? – Gumbo