繁体   English   中英

为window.location.href添加CSRF令牌

[英]Adding CSRF token for window.location.href

我在我的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并期望一个通用的解决方案将令牌附加到url,因为手动追加所有函数会很忙。

让我从laravel作为后端情况说话(在我的例子中只有一行相关,因为令牌必须来自某个地方)

<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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM