将CORS与AWS API网关一起使用会带来哪些安全影响

What are the security implications of using CORS with AWS API Gateway?

本文关键字:影响 安全 CORS AWS API 一起 网关      更新时间:2023-09-26

我看到了另一个关于使用带有访问控制允许来源的CORS的问题:*最令人担忧的是跨站点请求伪造攻击。

我想知道在将其与AWS API网关一起使用时,是否也存在同样的问题。

API网关的CORS文档没有提到CORS的任何缺点。

然而,S3 CORS文档显示Access Control Allow Origin:*仅与GET一起使用,但为PUT、POST和DELETE指定了一个原点。

对于我的具体用例,我想做api网关文档中所说的:使用JavaScript客户端调用部署在不同域上的api(即my-api-id.execute-api.region-id.amazonaws.com/test)。我为每个请求传递一个api-key。

在GET、POST、PUT、DELETE上使用Access Control Allow Origin:*安全吗?

无论您是否使用AWS API网关,CORS都会影响安全性和浏览器支持

对于安全问题,StackOverflow问题有一个很好的解释:CORS和XSS有任何连接吗?

请注意,如果API不是公共的,则不必将Access-Control-Allow-Origin设置为"*"。您可以将特定域列入白名单。

截至本文撰写之时,以下主要浏览器版本完全支持CORS:

  • 自31年以来的Chrome
  • iOS Safari自8.5起
  • Android浏览器自4.4
  • IE自11
  • Firefox 41
  • Safari自8

有关部分支持的完整详细信息和信息,请参阅http://caniuse.com/#feat=cors

您需要考虑一些事情来确定Access Control Allow Origin:*是否适用。

  1. 您的身份验证机制:如果您使用cookie进行身份验证,那么*将不起作用,因为当使用通配符时,浏览器将允许传递凭据(cookie)。如果您使用的是基于授权标头的方法,这不应该是一个问题。

  2. 是否需要允许从任何域提供的javascript调用API。如果你正在设计某种公共web api,你想让其他网站的页面调用,那么你无论如何都需要通配符。如果您只计划在自己的客户端代码上调用api,那么最安全的做法是使用更具限制性的主机特定值。所以,如果你提供你的html&js,然后设置访问控制允许来源的值:myapp.example.com;js,但仍然不想向世界开放——你必须运行一些代码来读取OPTIONS以及GET、POST、PUT、DELETE的Access Control Allow Origin响应标头中的传入Origin:header和echo back allowed。

我建议您在API网关上创建一个简单的原型资源和方法,然后尝试从您自己的域提供的一些html/js调用API。

以下是一些更相关的SO问题:

CORS:当凭证标志为真时,不能在访问控制允许来源中使用通配符

访问控制允许源通配符子域、端口和协议

访问控制允许来源多个来源域?