【问题标题】:Put csrf token on every route在每条路线上放置 csrf 令牌
【发布时间】:2019-12-06 01:49:31
【问题描述】:

我在我的 nodejs 网络应用程序上做了一个 csrf 实现。 但是只有当我通过 /login 路由时,才会附加 csrf 令牌。 我怎样才能做到它在每条路线上实施而不会导致错误? 或其他正确实施的想法?

我不认为使用通配符 ** 会有所帮助

这是我的 csrf 代码的代码:

app.use(
  attachCsrfToken(
    "/login",
    "csrfToken",
    (Math.random() * 100000000000000000).toString()
  )
);

function attachCsrfToken(url, cookie, value) {
  return function(req, res, next) {
    // console.log(req.url, url);

    if (req.url == url) {
      res.cookie(cookie, value);
    }

    next();
  };
}

有没有更好的实现方式?

【问题讨论】:

  • 你使用csurf模块吗?
  • @dimitristseggenes 没有。我复制粘贴了这个方法,并且这个方法以我不太了解的方式在函数中使用,所以我不想破坏整个应用程序。

标签: javascript node.js express cookies csrf


【解决方案1】:

您可以创建一个验证用户和 url 的中间件,并将其添加到您想要验证的任何路由中。

const express = require("express");
const router = express.Router();

function attachCsrfToken(req,res,next) {
    // validate request
    if (req.url == url) {
      res.cookie(cookie, value);
      next();
    }

    
    // if not valid throw error
    res.JSON({success:false,code:403,message:'Unauthorized Access'})
  };
router.use(
  "/api/someroute",
  attachCsrfToken,
  require("./handlers/somePath").someFunction
);

【讨论】:

  • 不明白你在这里做了什么以及它和我做的有什么不同?
  • 嘿@MendiSterenfeld,抱歉回复晚了,但在你的函数中你总是检查req.url === url(在你的情况下是“/login”,所以这就是我做了一个通用的中间件,你可以在任何你想要的路由中传递它。希望现在很清楚。
猜你喜欢
  • 1970-01-01
  • 2020-05-29
  • 2012-08-25
  • 2018-03-15
  • 2018-11-05
  • 2015-12-13
  • 2016-05-03
  • 1970-01-01
  • 2017-06-20
相关资源
最近更新 更多