我有一个Node.js应用程序,我在其中实现了CSRF。它工作正常,当我在JADE文件中有一些JavaScript内联时,我只是使用#{token}
将令牌放入JavaScript中。
但是,我现在已将我的JavaScript移动到外部文件中,并且无法找到将CSRF令牌输入到代码中的简单方法。我怎么能这样做?
答案 0 :(得分:1)
你可以简单地将你的令牌植入一个dom元素,比如一个隐藏的div。 并使用javascript获取该元素并读取令牌。
答案 1 :(得分: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);
答案 2 :(得分:0)
只需编写一个带有全局令牌var的内联脚本,您可以从任何其他脚本中引用它。
script
| window.myApp.token = #{token};
在你的js:
$.ajax({ data: { _csrf: window.myApp.token }, ...});
(确切的语法可能有问题,因为我使用了玉器很长一段时间,但我确信你会得到一般的想法。)