首页 > 解决方案 > 在每条路线上放置 csrf 令牌

问题描述

我在我的 nodejs web 应用程序上做了一个 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();
  };
}

有没有更好的方法来实现它?

标签: javascriptnode.jsexpresscookiescsrf

解决方案


您可以创建一个验证用户和 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
);


推荐阅读