【问题标题】:How to use Express JS 4.0's csurf?如何使用 Express JS 4.0 的 csurf?
【发布时间】:2014-07-18 00:45:57
【问题描述】:

我一直在查看csurf 的 wiki,但它是空的。这个模块在用户请求中添加了一个csrfToken()函数,但是,我应该如何使用它呢?

有人可以给出一个带有解释的代码示例吗?我应该在用户端做什么?我应该在服务器端做什么?

【问题讨论】:

    标签: javascript express csrf csrf-protection


    【解决方案1】:

    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) 上的维基百科文章。

    【讨论】:

    • 在 app.post 我必须检查 csrfToken 吗?
    • 不,Paresh,csurf 中间件会为您处理。如果_csrf 字段不存在且不正确,它将在您的 +post+ 处理程序之前被拒绝。
    • 感谢您的快速回复。我从express.js返回index.html,cookie中的_csrf令牌和角度的正面我得到cookie并使用_csrf在表单标签中设置,并将cookie中的令牌设置为隐藏,现在我按下提交但令牌总是返回EBADCSRFTOKEN。我哪里错了,请告诉我。
    • 我正在检查 req.body csrf 令牌是否存在,我也在检查浏览器 cookie 值是否与传递的值匹配,但它仍然拒绝请求
    • 我无法从你的描述中看出,Paresh。也许尝试用您的应用程序文件和表单源提出一个新问题?
    猜你喜欢
    • 2015-11-10
    • 2021-06-19
    • 2022-08-22
    • 2016-08-20
    • 2014-09-19
    • 2015-08-24
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    相关资源
    最近更新 更多