我有一個Node.js應用程序,我已經實現了CSRF。它運行良好,當我在JADE文件中內嵌了一些JavaScript時,我只使用#{token}
將令牌放入JavaScript中。如何將CSRF令牌嵌入到JavaScript文件中?
但是,我現在已經將我的JavaScript移動到外部文件中,並且無法找出將CSRF令牌輸入代碼的簡單方法。我該怎麼做?
我有一個Node.js應用程序,我已經實現了CSRF。它運行良好,當我在JADE文件中內嵌了一些JavaScript時,我只使用#{token}
將令牌放入JavaScript中。如何將CSRF令牌嵌入到JavaScript文件中?
但是,我現在已經將我的JavaScript移動到外部文件中,並且無法找出將CSRF令牌輸入代碼的簡單方法。我該怎麼做?
您可以簡單地將您的令牌植入一個dom元素,比如隱藏的div。 並使用JavaScript獲取該元素並讀取令牌。
只需編寫一個帶有全局令牌var的內聯腳本,您可以從任何其他腳本中引用該腳本。
script
| window.myApp.token = #{token};
而在你的JS:
$.ajax({ data: { _csrf: window.myApp.token }, ...});
(確切的語法可能是錯誤的,是因爲我用玉很長一段時間,但我敢肯定,你得到的總體思路)。
考慮在文檔頭部使用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);
之所以選擇其他的答案,因爲它避免了全局變量,但感謝! – tsvallender 2013-04-25 08:56:12