【发布时间】:2014-07-18 00:45:57
【问题描述】:
我一直在查看csurf 的 wiki,但它是空的。这个模块在用户请求中添加了一个csrfToken()函数,但是,我应该如何使用它呢?
有人可以给出一个带有解释的代码示例吗?我应该在用户端做什么?我应该在服务器端做什么?
【问题讨论】:
标签: javascript express csrf csrf-protection
我一直在查看csurf 的 wiki,但它是空的。这个模块在用户请求中添加了一个csrfToken()函数,但是,我应该如何使用它呢?
有人可以给出一个带有解释的代码示例吗?我应该在用户端做什么?我应该在服务器端做什么?
【问题讨论】:
标签: javascript express csrf csrf-protection
csurf 中间件旨在拒绝包含有效负载(例如,正文参数)的请求,如果它没有有效的令牌。以下是您将如何使用它:
app.use(require('body-parser')());
app.use(require('cookie-parser')('YOUR SECRET GOES HERE'));
app.use(require('express-session')());
app.use(require('csurf')());
app.get('/some-form', function(req, res){
res.send('<form action="/process" method="POST">' +
'<input type="hidden" name="_csrf" value="' + req.csrfToken() + '">' +
'Favorite color: <input type="text" name="favoriteColor">' +
'<button type="submit">Submit</button>' +
'</form>');
});
app.post('/process', function(req, res){
res.send('<p>Your favorite color is "' + req.body.favoriteColor + '".');
});
尝试取出req.csrfToken()(或用其他东西替换它);你会发现表单不再有效。
请注意,您需要会话才能使csurf 工作。如果您想了解使用csurf 的原因,请参阅cross-site request forgery (CSRF) 上的维基百科文章。
【讨论】:
_csrf 字段不存在且不正确,它将在您的 +post+ 处理程序之前被拒绝。