我看到了另一个关于使用带有访问控制允许来源的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:*是否适用。
-
您的身份验证机制:如果您使用cookie进行身份验证,那么*将不起作用,因为当使用通配符时,浏览器将允许传递凭据(cookie)。如果您使用的是基于授权标头的方法,这不应该是一个问题。
-
是否需要允许从任何域提供的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:当凭证标志为真时,不能在访问控制允许来源中使用通配符
访问控制允许源通配符子域、端口和协议
访问控制允许来源多个来源域?