【问题标题】:Errorhandling using express.csrf()使用 express.csrf() 进行错误处理
【发布时间】:2014-05-26 16:22:48
【问题描述】:

我有一些关于使用 CSRF 保护的问题。当我使用没有有效 csrf 令牌的“发布”路由时,我得到一个“错误:在 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 的用户无法访问任何路由,对吗?那么我可以只对特殊路线使用保护吗?

谢谢!

【问题讨论】:

    标签: node.js express


    【解决方案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(); 
    }
    

    【讨论】:

    • 谢谢!禁用 cookie 的用户呢?以及如何使用重定向触发错误:禁止?
    • 对于错误处理,您可以使用错误中间件。请参阅错误处理部分stephensugden.com/middleware_guide。错误中间件有 4 个函数参数,无论如何都会被处理。只需检查 403 错误并将用户重定向到您想要的位置。对于禁用的 cookie,请使用隐藏字段 :)
    • hmm...但是csrf令牌保存在会话中,只能通过会话ID找到?有了cookie,就没有id?
    猜你喜欢
    • 2011-09-18
    • 2014-02-17
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2021-01-27
    • 2011-06-04
    • 2018-05-04
    相关资源
    最近更新 更多