为window.location.href添加CSRF令牌

时间:2017-03-02 10:28:23

标签: javascript security csrf csrf-protection window.location

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

1 个答案:

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