CORS 允许任何端口安全吗?

CORS is it safe to allow any ports?

我们使用 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;
}

这些是headers

 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;
  }

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

最佳答案来自Open Web Application Security Project (OWASP) CORS Page 错误的 CORS 服务器配置 headers 可能会使您的用户暴露于 Cross site scripting (XSS).

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

要支持多个环境,您可以根据 process.env.NODE_ENV 更改 allowedOrigins,假设您将有一条用于开发的路由,一条用于测试等等:这可以让您动态检查端口对于开发和生产严格。

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