Node.js 使用express.csrf()进行错误处理

Node.js 使用express.csrf()进行错误处理,node.js,express,Node.js,Express,我对使用CSRF保护有一些疑问。当我在没有有效csrf令牌的情况下使用“post”路由时,我得到一个“错误:Object.exports.Error…..禁止”,是否可以将没有有效令牌的请求重定向到特殊路由 这是我的密码: app.use(express.csrf()); app.use(function (req, res, next) { res.locals.csrftoken = req.csrfToken(); next(); }); 另一个问题是,什么是

我对使用CSRF保护有一些疑问。当我在没有有效csrf令牌的情况下使用“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的用户不能访问任何路由,对吗?那么我只能在特殊路线上使用防护装置吗

谢谢

是的。你可以用

res.redirect('/redirect_route'); 

2) 我认为cookie或隐藏字段根本不安全,您可以随意使用

3) 对。您可以使用中间件来保护特殊路由

app.get('/account', checkToken, routes.account);

function checkUser(req, res, next) {
    res.locals.csrftoken = req.csrfToken();  
    next(); 
}

非常感谢。有禁用cookie的用户呢?我如何使用重定向触发错误:禁止?对于错误处理,可以使用错误中间件。请参阅错误处理部分。错误中间件有4个功能参数,将无论如何进行处理。只需检查403错误并将用户重定向到您需要的位置。对于禁用的Cookie,请使用隐藏字段:)嗯…但是csrf令牌保存在会话中,并且只能通过会话id找到?有了Put cookies,就没有id了?