1

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

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

4

3 回答 3

1

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

于 2013-04-25T08:43:23.417 回答
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/ )

于 2013-04-29T08:17:16.270 回答
0

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

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

在你的 js 中:

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

(确切的语法可能是错误的,自从我使用翡翠以来已经很长时间了,但我相信你明白了一般的想法)。

于 2013-04-25T08:42:11.890 回答