如何在JavaScript文件中嵌入CSRF令牌?

时间:2013-04-25 08:31:05

标签: javascript node.js express pug csrf

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

但是,我现在已将我的JavaScript移动到外部文件中,并且无法找到将CSRF令牌输入到代码中的简单方法。我怎么能这样做?

3 个答案:

答案 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);

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

答案 2 :(得分:0)

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

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

在你的js:

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

(确切的语法可能有问题,因为我使用了玉器很长一段时间,但我确信你会得到一般的想法。)