如何将CSRF令牌embedded到JavaScript文件中?

我有一个Node.js应用程序,我已经实现了CSRF。 它工作的很好,当我在JADE文件中内嵌了一些JavaScript时,我只是使用#{token}将令牌放入JavaScript中。

不过,我现在已经将我的JavaScript移动到了外部文件中,并且找不到一个简单的方法将CSRF标记input到代码中。 我怎么能这样做?

您可以简单地将您的令牌植入一个dom元素,例如隐藏的div。 并使用JavaScript来获取该元素并阅读令牌。

考虑在文档头部使用META元素来保存CSRF令牌。 然后在AJAX请求中使用这个标记。 如果您的服务器返回一个新的标记,则replaceMETA元素的内容。

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/

只需使用全局令牌var编写一个内联脚本,您可以从任何其他脚本中引用该脚本。

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

而在你的js中:

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

(确切的语法可能是错误的,因为我用了很长时间的玉,但我相信你会得到一般的想法)。