我们使用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;
}
我还可以为每个微服务有一个本地允许的端口
答案 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
,假设您有一条用于开发的路由,一条用于测试的路由,依此类推:这样可以动态检查开发的端口严格生产。
对于大型服务器场,通常使用根域的匹配项。