我有一个 Node.js 应用程序,我在其中实现了 CSRF。它工作正常,当我在 JADE 文件中有一些内联 JavaScript 时,我只是用来#{token}
将令牌放入 JavaScript。
但是,我现在已经将我的 JavaScript 移动到外部文件中,并且无法找到一种将 CSRF 令牌输入到代码中的简单方法。我该怎么做?
我有一个 Node.js 应用程序,我在其中实现了 CSRF。它工作正常,当我在 JADE 文件中有一些内联 JavaScript 时,我只是用来#{token}
将令牌放入 JavaScript。
但是,我现在已经将我的 JavaScript 移动到外部文件中,并且无法找到一种将 CSRF 令牌输入到代码中的简单方法。我该怎么做?
您可以简单地将令牌植入到一个 dom 元素中,例如隐藏的 div。并使用 javascript 获取该元素并读取令牌。
考虑在文档头部使用 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);
只需编写一个带有全局标记 var 的内联脚本,您可以从任何其他脚本中引用它。
script
| window.myApp.token = #{token};
在你的 js 中:
$.ajax({ data: { _csrf: window.myApp.token }, ...});
(确切的语法可能是错误的,自从我使用翡翠以来已经很长时间了,但我相信你明白了一般的想法)。