如何将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);
只需使用全局令牌var编写一个内联脚本,您可以从任何其他脚本中引用该脚本。
script | window.myApp.token = #{token};
而在你的js中:
$.ajax({ data: { _csrf: window.myApp.token }, ...});
(确切的语法可能是错误的,因为我用了很长时间的玉,但我相信你会得到一般的想法)。