AWS Cognito 和 CORS 安全问题

AWS Cognito and CORS Security Concern

我有一个 Web 客户端通过 AWS API 网关向 AWS Lambda 发出请求。我正在使用 AWS Cognito 和 Auth0 对用户进行身份验证。

我的问题与来自 AWS API 网关端点的 CORS 响应 header 相关,特别是设置为任何“”的 Access-Control-Allow-Origin 响应 header *'”。本文指出了使用任何“'*'”参数的风险,即 back-end 上的 'hacker can coopt our site to request any method':(CORS Security link).

虽然 Cognito 的身份验证可以证明发出请求的最终用户是他所说的人,但 Cognito 的身份验证不一定证明代表用户发出请求的网站是 mywebsite.com 而不是 attacker.com

Cognito 是否保证请求来自 mywebsite.com?

是否有安全的方法来实现任何“'*'”Access-Control-Allow-Origin响应header?

Cognito 是否保证请求来自 mywebsite.com?

没有。 Cognito 与您的域无关。它只关心用户 authentication/management.

是否有安全的方法来实现任何“'*'”Access-Control-Allow-Origin响应header?

嗯,是的,也不是。正如您在 post 中所说,Cognito 将对用户进行身份验证 这意味着设置 Access-Control-Allow-Origin: * 后,任何域都可以发出跨源请求,但如果他们无法提供有效的身份验证令牌,然后他们会收到 401 错误。

如果你想限制哪些域可以访问,那么你不能使用** 是一个通配符,因此允许任何值。因此,如果您只想让 mywebsite.com 能够发出 CORS 请求,请将 * 替换为 mywebsite.com。这使得只允许来自该域的请求。来自 attacker.com 的请求现在将失败,因为它们没有正确的 header。