关于 RESTful API 和 Access-Control-Allow-Origin:"*"

2015-05-24 17:30:55 +08:00
 immjun
1. 先不说 token 和 jsonp 。在开发 RESTful API json 接口的时候,给这些接口加上 Access-Control-Allow-Origin:"*" 可能会产生哪些安全问题?

2. 大家一般是如何处理 RESTful API 的跨域调用问题的?

感谢。
3954 次点击
所在节点    问与答
9 条回复
learnshare
2015-05-24 17:47:16 +08:00
如果是网站调用的 API,应该只允许该网站的域名访问;如果是 APP 调用,就需要用 "*" 了。
至于安全问题,应该是通过使用比较完善的校验机制来控制访问,控制好用户认证和权限吧。

RESTful 跨域比较建议用 CORS,JSONP 这种并不是好东西。
ZackYang
2015-05-24 19:18:57 +08:00
考虑以下情景:

a.com 开发了一个 REST API 给 b.com 站用. 结果把 Access-Control-Allow-Origin 设置成 *.

a.com REST API 权限校验存在 cookie 中, 每次发起请求的时候, 会带上这个 cookie.

现在有一个站点: c.com, 用户访问 c.com, 其中有一个 ajax 请求到 a.com 去请求一个敏感信息, 由于 a.com 没有限制域名, 所以 c.com 发起请求的时候同样会带上 a.com 的 cookie 并且能正确得到结果. 这时候 ajax 返回后立即将结果再次 ajax 发送到 c.com 的服务端.

于是, c.com 得到了只能应该 b.com 访问的敏感内容.
kslr
2015-05-24 21:19:21 +08:00
@ZackYang 话说竟然存在cookie
immjun
2015-05-24 21:41:57 +08:00
@ZackYang
@kslr
RESTful API 一般都用 token 没有 cookie , 这样的话 CORS "*" 还有其他安全问题没? 你们的 api 如何做跨域的呢?
belin520
2015-05-24 21:43:51 +08:00
@immjun *,token服务器生成维护

话说aouth2也是token泄露了一样可以调用api,没办法吧
icqdany
2015-05-24 21:53:15 +08:00
Access-Control-Allow-Origin:"仅设置为需要调用的域名"
kslr
2015-05-24 21:53:16 +08:00
@immjun 用token为何还有cors
immjun
2015-05-24 22:02:47 +08:00
@kslr token 是用来安全认证的 cors 是用来设置跨域 没有矛盾呀
wangxiao2015
2015-06-17 17:39:30 +08:00
简单回复:

1、某些情况,浏览器你写 *,CORS 中的 request option 那步就不会让你通过;
2、无法很好的防御 CSRF,相当于从任意一个域都可以伪造目标域的请求;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/193372

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX