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
,假设您将有一条用于开发的路由,一条用于测试等等:这可以让您动态检查端口对于开发和生产严格。
对于大型服务器场,通常使用根域的匹配。
我们使用 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
,假设您将有一条用于开发的路由,一条用于测试等等:这可以让您动态检查端口对于开发和生产严格。
对于大型服务器场,通常使用根域的匹配。