【问题标题】:How to dynamically skip express csurf based on form data?如何根据表单数据动态跳过 express csurf?
【发布时间】:2020-11-10 05:30:46
【问题描述】:

我有一个第三方想要通过 POST 向我的网站发送表单以预设一些输入。 POST 也用于完成表单并在提供所有字段后处理数据。

当用户提交表单并且数据将在服务器端处理时,表单应该受 CSRF 保护,但是当第三方最初发送一些数据时应该跳过 CSRF 令牌检查。

在使用 csurf 时,基于发送到特定路由的数据和 HTTP 动词/方法绕过 CSRF 验证的干净方法是什么?

我看到的一种方法是通过使用不同的路由端点来解决这个问题,但有没有更直接的解决方案?

【问题讨论】:

    标签: node.js forms express csrf csrf-token


    【解决方案1】:

    您可以在这里找到答案:Calling a middleware from within a middleware in NodeJS/ExpressJS。问题是实现一个中间件,它会在条件匹配时调用 csrf 中间件,或者直接用next() 调用下一个中间件。

    例子:

    app.use('my-route', (req, res, next) => {
        if (condition) {
            return csrfMiddleware(req, res, next);
        } else {
            return next();
        }
    });
    

    如果您想将此中间件用于特定动词,请将app.use 替换为app.<verb>。例如,app.get 几乎是一个检查 get 动词的中间件。

    【讨论】:

    • 谢谢,我也想过这个问题,但发现它相当复杂和令人困惑,因为它在不同的层实现了一件事,而对于这个问题,仅针对一种情况。有点像三明治,中间夹着 csurf。
    • 更新:我实际上最终做了这样的事情来完成它:-/
    • @Arc,您在这里找到替代解决方案了吗?我正在尝试在我的 express 服务器中的 chrome 扩展中发出请求,但我已经在这些路由上设置了 csrf 保护。
    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2011-11-11
    • 1970-01-01
    • 2013-11-12
    • 2023-01-10
    • 1970-01-01
    相关资源
    最近更新 更多