我对使用CSRF保护有一些疑问。当我使用没有有效csrf-token的“post”路由时,我得到一个“错误:禁止在Object.exports.error ....”,是否可以将没有有效令牌的请求重定向到特殊路由?
这是我的代码:
app.use(express.csrf());
app.use(function (req, res, next) {
res.locals.csrftoken = req.csrfToken();
next();
});
另一个问题是,什么是保护此令牌的好方法?将它存储在cookie中更好,而不是使用隐藏字段吗?或者对安全性没有任何不同?
form(method="post",action="/test")
input(type="hidden", name="_csrf", value="#{csrftoken}")
第三个问题是:禁用cookie的用户无法访问任何路由,对吧?那么我可以仅对特殊路线使用保护吗?
谢谢!
答案 0 :(得分:1)
1)是的。你可以使用
res.redirect('/redirect_route');
请参阅http://expressjs.com/4x/api.html#res.redirect
2)我的cookie或隐藏字段根本不安全,你可以使用你喜欢的东西
3)是的。您可以使用中间件来保护特殊路线
app.get('/account', checkToken, routes.account);
function checkUser(req, res, next) {
res.locals.csrftoken = req.csrfToken();
next();
}