V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
uiosun
V2EX  ›  程序员

HTTP 服务可以防跨域,但小程序怎么办呢?

  •  
  •   uiosun · 2021-03-01 16:32:31 +08:00 · 3667 次点击
    这是一个创建于 1395 天前的主题,其中的信息可能已经有所发展或是发生改变。

    蠢了蠢了,才发现 wx.request 本身就是个域,单独限定就好。


    求助老哥,小程序有没有类似的跨域机制,防止第三方服务访问我的接口?

    meshell
        1
    meshell  
       2021-03-01 16:35:54 +08:00   ❤️ 1
    "http 服务可以防跨域"是啥意思? 跨域是浏览器的限制呀
    KyonLi
        2
    KyonLi  
       2021-03-01 16:37:14 +08:00
    绑定域名要验证所有权的
    uiosun
        3
    uiosun  
    OP
       2021-03-01 16:37:24 +08:00
    @meshell ……CROS 是服务端限制。至于你说的“浏览器的安全设置”,是后期才添加的(早期的一些浏览器,甚至没有 CROS 安全设定)
    meshell
        4
    meshell  
       2021-03-01 16:44:39 +08:00   ❤️ 4
    @uiosun .....
    weixiangzhe
        5
    weixiangzhe  
       2021-03-01 16:47:53 +08:00 via iPhone
    也可以加上 carf token 一类东西 限制一下
    wunonglin
        6
    wunonglin  
       2021-03-01 16:49:42 +08:00
    。。。。。什么鬼需求。浏览器能防止而已,反代不久破了么?
    ByZHkc3
        7
    ByZHkc3  
       2021-03-01 16:55:55 +08:00
    小程序很简单啊,你每次请求接口时用 wx.login 拿到 code,用这个 code 在后端做鉴权拦截就好了,一个用户一分钟最多只能请求 100 次这个接口,足够用了
    uurun
        8
    uurun  
       2021-03-01 17:15:48 +08:00
    跨域是浏览器限制的
    qinxi
        9
    qinxi  
       2021-03-01 17:42:51 +08:00
    @uiosun #3 ???你在说什么
    yiqiao
        10
    yiqiao  
       2021-03-01 17:45:33 +08:00
    跨域和第三方服务访问没有关系啊,
    要想防止就做接口鉴权。
    luoxiaoyang2021
        11
    luoxiaoyang2021  
       2021-03-01 17:49:12 +08:00
    CROS 是服务端限制到没错、但是只有浏览器遵守了它
    fucUup
        12
    fucUup  
       2021-03-01 18:25:16 +08:00 via Android
    楼主你虚心一点,
    预检请求返回后,所有浏览器都会遵守的,微信浏览器也会遵守

    你什么都不用做,你在干啥呢
    huabalance
        13
    huabalance  
       2021-03-01 18:37:00 +08:00
    Cross-Origin Resource Sharing (CORS)
    Cross-site request forgery (CSRF)
    bruce0
        14
    bruce0  
       2021-03-01 18:41:22 +08:00
    @meshell 对呀 没看懂啥意思
    HTTP 协议是没有跨域限制的, 日常说的跨域是浏览器做的限制
    chinvo
        15
    chinvo  
       2021-03-01 18:45:23 +08:00 via iPhone
    cors 响应头是服务器发的,但是限制是客户端(浏览器)自己限制的,不遵守 cors 的“客户端”就可以无视了,比如对方用代码转发,甚至更简单点,用 Nginx 转发。
    musi
        16
    musi  
       2021-03-01 19:04:12 +08:00   ❤️ 1
    @uiosun 我寻思这 CORS 报错是浏览器报的错吧?而且请求也是正常发送的,只是把响应拦截了而已。cors 响应头更像是服务端设置的开关,告诉浏览器什么时候作出限制。
    如果说 CORS 是服务端的限制,那不管你的客户端是什么,只要请求这个后端都会受到 CORS 的限制,如果是这样你的这个问题也就不存在了吧?
    附一个 MDN 地址(这片不建议看中文,翻译有点歧义):
    https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
    wxsm
        17
    wxsm  
       2021-03-01 19:05:06 +08:00   ❤️ 1
    > CROS 是服务端限制

    你真搞错了,CROS 是纯客户端限制,真正意义上的君子协定。从服务端安全角度上来说起不到任何作用。
    tanranran
        18
    tanranran  
       2021-03-01 19:07:36 +08:00
    CROS 有乱用,我不用浏览器,照样绕过。token 就能解决你这个问题
    whypool
        19
    whypool  
       2021-03-01 19:17:31 +08:00 via Android
    调用微信鉴权的逻辑就行了
    renmu123
        20
    renmu123  
       2021-03-01 19:29:07 +08:00 via Android
    楼上的 cros 都是故意的吗,如果是服务端设置,那就不存在爬虫工程师了
    zzzmj
        21
    zzzmj  
       2021-03-01 19:32:47 +08:00
    cros ...
    jinliming2
        22
    jinliming2  
       2021-03-01 19:43:38 +08:00   ❤️ 1
    CROS 是什么鬼……不是 CORS 么……😂
    CORS 只能防止第三方不能再浏览器上直接请求你的接口,但不能防止第三方服务访问你的接口。
    防止第三方服务访问很困难,因为你的所有限制都可以通过第三方反代解除。
    加 token 、加校验都只能是提升那么一丢丢门槛而已。
    uiosun
        23
    uiosun  
    OP
       2021-03-01 19:56:49 +08:00
    @jinliming2 原来是这样,年轻了,我还以为是服务端做的操作(凭着感觉打出了 CROS,🤣)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1077 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:08 · PVG 03:08 · LAX 11:08 · JFK 14:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.