3

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

我想知道将它与 AWS API Gateway 一起使用时是否存在同样的问题。

API Gateway的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: * 是否安全?

4

2 回答 2

1

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

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

  2. 您是否需要允许从任何域提供的 javascript 来调用您的 API。如果您正在设计某种公共 Web api,您希望从其他站点调用页面提供服务,那么无论如何您都需要通配符。如果您只计划使用自己的客户端代码调用 api,那么最安全的做法是使用更 restrive 主机特定的值。因此,如果您从 myapp.example.com 提供 html 和 js,则设置 Access-Control-Allow-Origin 的值:myapp.example.com。如果您需要提供来自多个域的 html 和 js,但仍不想向世界开放,则必须运行一些代码来读取传入的 Origin: header 和回显 Access 中允许的那些-Control-Allow-Origin 选项以及 GET、POST、PUT、DELETE 的响应标头。

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

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

CORS:当凭据标志为真时,无法在 Access-Control-Allow-Origin 中使用通配符

Access-Control-Allow-Origin 通配符子域、端口和协议

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

于 2015-12-30T23:27:07.093 回答
1

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

对于安全问题,对这个 StackOverflow 问题有一个很好的解释: CORS 和 XSS 有什么联系吗?

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

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

  • 铬自 31
  • 自 8.5 起的 iOS Safari
  • 自 4.4 以来的 Android 浏览器
  • 11 年以来的 IE
  • 火狐 41
  • 从 8 开始的 Safari

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

于 2015-11-02T20:43:06.657 回答