我看到另一个关于将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:*是否安全?
答案 0 :(得分:1)
无论您是否使用AWS API Gateway,CORS都会对安全性和浏览器支持产生影响
出于安全考虑,对此StackOverflow问题有一个很好的解释:Does CORS and XSS have any connection?
请注意,如果您的API不公开,则不必将Access-Control-Allow-Origin设置为“*”。您可以将特定域列入白名单。
在撰写本文时,CORS完全支持这些主要的浏览器版本:
有关部分支持的完整详细信息和信息,请参阅http://caniuse.com/#feat=cors
答案 1 :(得分:1)
您需要考虑一些事情来确定Access-Control-Allow-Origin:*是否适合您。
您的身份验证机制:如果您使用Cookie进行身份验证,那么*将无效,因为浏览器将允许在使用通配符时传递凭据(cookie)。如果您使用的是基于授权标头的方法,那么这应该不是问题。
是否需要允许从任何域提供的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。
我建议您在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