CSURF Angular 实施
CSURF Angular Implementation
我一直在尝试对我一直在从事的个人项目进行 csurf 实施。我一直在到处搜索 google,试图弄清楚当我不使用像 Jade 或 EJS 这样的模板引擎时如何在表单上实现 csurf。我的 Express 服务器也不直接呈现页面,而是主要返回 JSON。我的所有前端都像这样被引用
app.use(express.static(__dirname + '/www'));
我使用 csurf 的服务器代码如下所示
app.use(csurf());
app.use(function (req, res, next) {
res.cookie('XSRF-TOKEN', req.csrfToken());
next();
});
在表单的前端,html 输入字段如下所示。我也在使用 AngularJS 并且根据我看到的示例,我应该做的就是这个。
<input type="hidden" name="_csrf" value="{{csrftoken}}">
我在终端中收到以下错误
Error: invalid csrf token
如果我检查隐藏的输入,这就是显示的内容。
<input type="hidden" name="_csrf" value="">
在您的控制器中,您需要将局部变量设置为等于 csrf cookie 的值
例如
.controller('YourCtrl', function($cookies, $scope) {
$scope.csrftoken = $cookies._csrf
}
);
要使该示例正常工作,您需要包含 ngCookies 模块,因此请在您的 index.html
中包含类似的内容
<script src="bower_components/angular-cookies/angular-cookies.js"></script>
然后将依赖项 'ngCookies' 添加到您的模块。
根据 $http
documentation 的“跨站请求伪造 (XSRF) 保护”部分:
When performing XHR requests, the $http service reads a token from a cookie (by default, XSRF-TOKEN) and sets it as an HTTP header (X-XSRF-TOKEN).
因此,您只需配置 csurf
模块即可使用该 cookie。像那样:
var csrf = require('csurf');
...
// Cookie / Session initialization etc
app.use(cookieParser());
...
// Important : csrf should be added after cookie and session initialization.
// Otherwise you will get 'Error: misconfigured csrf'
app.use(csrf());
app.use(function(req, res, next) {
res.cookie('XSRF-TOKEN', req.csrfToken());
next();
});
...
这样做,您不需要配置 AngularJS 内容和创建隐藏输入。
我一直在尝试对我一直在从事的个人项目进行 csurf 实施。我一直在到处搜索 google,试图弄清楚当我不使用像 Jade 或 EJS 这样的模板引擎时如何在表单上实现 csurf。我的 Express 服务器也不直接呈现页面,而是主要返回 JSON。我的所有前端都像这样被引用
app.use(express.static(__dirname + '/www'));
我使用 csurf 的服务器代码如下所示
app.use(csurf());
app.use(function (req, res, next) {
res.cookie('XSRF-TOKEN', req.csrfToken());
next();
});
在表单的前端,html 输入字段如下所示。我也在使用 AngularJS 并且根据我看到的示例,我应该做的就是这个。
<input type="hidden" name="_csrf" value="{{csrftoken}}">
我在终端中收到以下错误
Error: invalid csrf token
如果我检查隐藏的输入,这就是显示的内容。
<input type="hidden" name="_csrf" value="">
在您的控制器中,您需要将局部变量设置为等于 csrf cookie 的值
例如
.controller('YourCtrl', function($cookies, $scope) {
$scope.csrftoken = $cookies._csrf
}
);
要使该示例正常工作,您需要包含 ngCookies 模块,因此请在您的 index.html
中包含类似的内容<script src="bower_components/angular-cookies/angular-cookies.js"></script>
然后将依赖项 'ngCookies' 添加到您的模块。
根据 $http
documentation 的“跨站请求伪造 (XSRF) 保护”部分:
When performing XHR requests, the $http service reads a token from a cookie (by default, XSRF-TOKEN) and sets it as an HTTP header (X-XSRF-TOKEN).
因此,您只需配置 csurf
模块即可使用该 cookie。像那样:
var csrf = require('csurf');
...
// Cookie / Session initialization etc
app.use(cookieParser());
...
// Important : csrf should be added after cookie and session initialization.
// Otherwise you will get 'Error: misconfigured csrf'
app.use(csrf());
app.use(function(req, res, next) {
res.cookie('XSRF-TOKEN', req.csrfToken());
next();
});
...
这样做,您不需要配置 AngularJS 内容和创建隐藏输入。