我在沒有框架的部分無狀態 Web 應用程式中實作雙重提交 cookie 模式的自編碼非常基本的方法(詳細資訊:https ://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie)用 PHP 和 JavaScript (jQuery) 撰寫的會是這樣的:
PHP - 對于每個請求:
setcookie(
"meow_csrf",
$value = "some_securly_generated_random_string",
0,
"/",
"mydomain.com",
true,
false
);
JavaScript - 用于 ajax 請求:
// JS
$.ajax({
type: "POST",
url: '/ajax.php?action=update_user_details&meow_csrf=' . $.cookie('meow_csrf'),
error: function() {
// blabla
},
success: function(data){
// blabla
}
});
PHP - 服務器端檢查:
function tokenCheck(): bool
{
return $_COOKIE["meow_csrf"]) === urldecode($_GET["meow_csrf"]);
}
請注意 PHP 中的 setcookie 是如何作業的:https ://www.php.net/manual/en/function.setcookie.php
這已經是針對 CSRF 攻擊的基本保護還是我誤解了什么?請注意,cookie 只能通過 HTTPS 傳輸,因此無法通過網路輕松讀取。雖然它不是 HTTPOnly。
uj5u.com熱心網友回復:
請注意,為每個請求更新 cookie 時可能會出現一些問題。假設用戶填寫了一個表單并同時打開了另一個選項卡(也許是為了查找某些內容)。當他最終發送表單時,cookie 已經由于同時的請求而改變。這也將發生在第一次初始化頁面和最終發送請求之間的任何呼叫中。
我認為一旦設定了 CRSF 令牌,您就不需要為當前會話更改它。是的,我認為這是針對 CRSF 攻擊的基本方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/511459.html
