V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
immjun
V2EX  ›  问与答

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

  •  
  •   immjun · 2015-05-24 17:30:55 +08:00 · 4147 次点击
    这是一个创建于 3478 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 先不说 token 和 jsonp 。在开发 RESTful API json 接口的时候,给这些接口加上 Access-Control-Allow-Origin:"*" 可能会产生哪些安全问题?

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

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

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

    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
        3
    kslr  
       2015-05-24 21:19:21 +08:00 via Android
    @ZackYang 话说竟然存在cookie
    immjun
        4
    immjun  
    OP
       2015-05-24 21:41:57 +08:00
    @ZackYang
    @kslr
    RESTful API 一般都用 token 没有 cookie , 这样的话 CORS "*" 还有其他安全问题没? 你们的 api 如何做跨域的呢?
    belin520
        5
    belin520  
       2015-05-24 21:43:51 +08:00 via Android   ❤️ 1
    @immjun *,token服务器生成维护

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

    1、某些情况,浏览器你写 *,CORS 中的 request option 那步就不会让你通过;
    2、无法很好的防御 CSRF,相当于从任意一个域都可以伪造目标域的请求;
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2292 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:45 · PVG 09:45 · LAX 17:45 · JFK 20:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.