2013-04-25 92 views
1

我有一個Node.js應用程序,我已經實現了CSRF。它運行良好,當我在JADE文件中內嵌了一些JavaScript時,我只使用#{token}將令牌放入JavaScript中。如何將CSRF令牌嵌入到JavaScript文件中?

但是,我現在已經將我的JavaScript移動到外部文件中,並且無法找出將CSRF令牌輸入代碼的簡單方法。我該怎麼做?

回答

1

您可以簡單地將您的令牌植入一個dom元素,比如隱藏的div。 並使用JavaScript獲取該元素並讀取令牌。

0

只需編寫一個帶有全局令牌var的內聯腳本,您可以從任何其他腳本中引用該腳本。

script 
    | window.myApp.token = #{token}; 

而在你的JS:

$.ajax({ data: { _csrf: window.myApp.token }, ...}); 

(確切的語法可能是錯誤的,是因爲我用玉很長一段時間,但我敢肯定,你得到的總體思路)。

+0

之所以選擇其他的答案,因爲它避免了全局變量,但感謝! – tsvallender 2013-04-25 08:56:12

1

考慮在文檔頭部使用META元素來保存CSRF令牌。然後在AJAX請求中使用這個標記。如果您的服務器返回新的令牌,請替換META元素的內容。

HTML:

<html> 
<head> 
    <!-- generate this server-side --> 
    <meta name="csrf" content="A_VALUE"> 
</head> 
<body> 
    <form> 
    <input type="text" name="something"> 
    <input type="submit" value="Send"> 
    </form> 
<body> 
</html> 

JAVASCRIPT

(function($) { 
    var csrf = $("meta[name='csrf']").attr("content"); 
    $("form").submit(function (evt) { 
    evt.preventDefault(); 
    alert("CSRF: " + csrf); 
    }); 
})(jQuery); 

http://jsfiddle.net/ZmesY/1/