AWS Cognito 和 CORS 安全问题

tim*_*egg 6 security amazon-web-services cors amazon-cognito auth0

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

我的问题与来自 AWS API Gateway 端点的 CORS 响应标头相关,特别是设置为任何“' * '”的 Access-Control-Allow-Origin 响应标头。本文指出了使用任何“' * '”参数的风险,即“黑客可以在我们的后端选择我们的网站来请求任何方法”:(CORS 安全链接)。

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

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

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

Rya*_*bbs 6

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

不会。Cognito 不知道您的域。它所关心的是用户身份验证/管理。

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

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

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