将CORS与AWS API Gateway结合使用会带来什么安全隐患?

时间:2015-10-30 17:03:17

标签: javascript security amazon-web-services aws-api-gateway

我看到另一个关于将CORS与Access-Control-Allow-Origin:*一起使用的问题,最令人担忧的是跨站点请求伪造攻击。

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

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

但是,S3 CORS documentation显示Access-Control-Allow-Origin:*仅用于GET,但指定了PUT,POST和DELETE的原点。

对于我的特定用例,我想做api网关文档所说的内容:使用JavaScript客户端调用部署在不同域上的API(即my-api-id.execute-api.region-id.amazonaws。 COM /检验)。我正在为每个请求传递一个api-key。

在GET,POST,PUT,DELETE上使用Access-Control-Allow-Origin:*是否安全?

2 个答案:

答案 0 :(得分:1)

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

出于安全考虑,对此StackOverflow问题有一个很好的解释:Does CORS and XSS have any connection?

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

在撰写本文时,CORS完全支持这些主要的浏览器版本:

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

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

答案 1 :(得分:1)

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

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

  2. 是否需要允许从任何域提供的javascript来调用您的API。如果您正在设计某种公共网络API,您希望从其他网站调用页面,那么您无论如何都需要通配符。如果您只是计划调用api的自己的客户端代码,那么最安全的事情就是使用更具特定性的主机特定值。所以如果你提供你的html&来自myapp.example.com的js然后设置Access-Control-Allow-Origin:myapp.example.com的值。如果你需要提供html&来自多个域的js但仍然不想向世界开放,你必须运行一些代码来读取传入的Origin:header并回显Access-Control-Allow-Origin响应头中允许的那些对于OPTIONS以及GET,POST,PUT,DELETE。

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

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

    CORS: Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true

    Access-Control-Allow-Origin wildcard subdomains, ports and protocols

    Access-Control-Allow-Origin Multiple Origin Domains?