2017-03-02 597 views
1

我在我的javascripts中使用了幾個地方的window.location.href。有沒有任何通用的方法來將CSRF令牌添加到所有這些令牌?爲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

你應該產生在後端的CSRF令牌(假設你是不是在談論Node.js的),你如果你想有一個「標準」的地方來獲得令牌,可以把它放在標題中。但是,你需要csrf重定向嗎?將它用於表單不是更好嗎? –

+0

我使用的是純javascript。我已經創建了CSRF令牌並將其保存在cookie中。我同意**最好使用表單,並且我們可能不需要CSRF重定向**。 但不幸的是,我的後端邏輯來檢查CSRF令牌沒有更多的智能來分離不同類型的請求,並最終從前端修復。 – Barath

+0

但客戶端如何生成csrf令牌保護你? *「永遠不要相信客戶端」* –

回答

0

讓我從一個laravel講話作爲後端的情況下(只是在我的例子中有關1號線,因爲令牌有來自某處)

<meta id="csrf" name="csrf-token" content="{{ csrf_token() }}"> 

會在元標記與輸出CSRF令牌id 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; 
} 
+0

我確定這會工作,但我需要重定向許多地方使用'addCSRFAndProceed()'。是否有任何其他通用和動態的方式來執行像'window.location.href = window.location.href + getCSRFTokenAndValue()'? – Barath

+0

使用Ajax調用?這樣你就可以得到多個 –