CORS允许任何端口安全吗?

时间:2020-06-23 15:43:25

标签: node.js security cors microservices vercel

我们使用vercel / micro,我们需要允许多个来源,这使得本地开发更加容易,并且我们需要为将来的多个客户提供支持。我遇到了问题,因为港口对于本地发展是动态的。这是我想出的,它一直在起作用,但是这会被认为安全吗?它会通过安全审核吗?

function isAllowedOrigin({ req, baseUrl }) {
  const allowedOrigins = [new URL(baseUrl.replace(/\/$/g, ""))];
  const origin = new URL(req.headers.origin);
  const foundOrigin = allowedOrigins.find((allowedOrigin) => {
    allowedOrigin.port = origin.port;
    return allowedOrigin.origin === origin.origin;
  });
  return foundOrigin;
}

这些是标题

 const headers = {
    "Access-Control-Allow-Credentials": true,
    "Access-Control-Allow-Headers":
      "Origin, X-Requested-With, Content-Type, Accept, Authorization",
  };

  if (isAllowedOrigin({ req, baseUrl })) {
    headers["Access-Control-Allow-Origin"] = req.headers.origin;
  }

我还可以为每个微服务有一个本地允许的端口

1 个答案:

答案 0 :(得分:1)

最佳答案来自Open Web Application Security Project (OWASP) CORS Page CORS标头的服务器配置不正确可能会使您的用户接触Cross site scripting (XSS)

在您的示例中,恶意用户可以发送源字符串,使您崩溃new URL('hello') // this throws an error

要支持多个环境,可以在allowedOrigins的基础上更改process.env.NODE_ENV,假设您有一条用于开发的路由,一条用于测试的路由,依此类推:这样可以动态检查开发的端口严格生产。

对于大型服务器场,通常使用根域的匹配项。