我在javascripts中使用过window.location.href
个几个地方。有没有通用的方法来为所有这些添加CSRF令牌?
因为window.location是一个对象而
window.location.href
是 它的一个属性,我们无法覆盖它。编写如下所示的常用函数并路由所有 实例将更加手动和耗时。
addCSRFAndProceed(url);
function addCSRFAndProceed (url) {
window.location.href = url + getCSRFTokenAndValue();
}
后端代码 以下是从我的后端设置CSRF cookie的代码。
$_COOKIE['CSRFTOKEN'] = '123456';
HTML代码
<div class="redirect-button" onclick="TriggerRequest()">
Javascript代码
function TriggerRequest() {
window.location.href="www.mysite.com/?index.php&from=desktop";
}
我有不同的函数使用window.location.href
并期望通用解决方案将令牌附加到网址,因为在所有函数中手动追加将会很忙。
答案 0 :(得分:0)
让我从一个laravel作为后端情况说话(在我的例子中只有1行相关,因为令牌必须来自某个地方)
<meta id="csrf" name="csrf-token" content="{{ csrf_token() }}">
会在id
csrf的元标记中输出csrf标记吗?
使用和修改重定向代码的方法如下:
addCSRFAndProceed(url);
function addCSRFAndProceed (url) {
window.location.href = url + '?token=' + getCSRFTokenAndValue();
}
function getCSRFTokenAndValue() {
return document.getElementById("csrf").getAttribute('content');
}
您还应该为后端编写代码来检查查询字符串参数token
,然后只返回请求的页面。 (服务器端验证)
伪代码(仍然不知道你的后端)
if ($query_string_array['token'] == 'accepted token') {
return view:page;
} else {
return error: token does not match;
}