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

如何禁止代理进行跨域请求?

  •  
  •   wmui · 2019-04-30 12:44:52 +08:00 · 2347 次点击
    这是一个创建于 2041 天前的主题,其中的信息可能已经有所发展或是发生改变。

    后端设置了 CORS,Access-Control-Allow-Origin: https://www.test.com ,但是这样做通过代理工具是可以正常获取数据的(如 postman )。如何做才能不让本地代理获取数据呢,如果不能阻止的话,岂不是可以获取所有数据?菜鸟求大神指点一二

    17 条回复    2019-04-30 17:54:37 +08:00
    tomczhen
        1
    tomczhen  
       2019-04-30 12:55:44 +08:00
    你猜浏览器是怎么获取到 Access-Control-Allow-Origin 头的值的?
    iamaprin
        2
    iamaprin  
       2019-04-30 12:57:36 +08:00 via Android
    CORS 只对浏览器生效,这种问题从服务端解决。
    wmui
        3
    wmui  
    OP
       2019-04-30 14:26:31 +08:00
    @iamaprin 服务端应该如何解决呢?限制请求频率吗?求提供思路
    cydian
        4
    cydian  
       2019-04-30 14:29:03 +08:00 via Android
    你如果是不需要权限的接口,cors 是防止直接调用数据的。
    给接口上权限。
    cydian
        5
    cydian  
       2019-04-30 14:29:18 +08:00 via Android
    @tomczhen 怎么获取的?这个问题很有意思
    wmui
        6
    wmui  
    OP
       2019-04-30 14:31:18 +08:00
    @tomczhen 是不是服务端判断下请求来源,如果是是代理拒绝掉就行了
    Felldeadbird
        7
    Felldeadbird  
       2019-04-30 14:54:03 +08:00
    加域名鉴权啊,白名单才可以跨域。
    Felldeadbird
        8
    Felldeadbird  
       2019-04-30 14:55:49 +08:00   ❤️ 1
    补充一下详情吧。
    首先,我后端是 www.abc.com
    我允许 www.test.com 对我发起跨域请求。
    我后端会判断当前域名是否来自 www.test.com ,其次还会判断他 IP 地址是否对应上。都符合才会进入业务处理。。
    wmui
        9
    wmui  
    OP
       2019-04-30 15:52:00 +08:00
    @Felldeadbird 万分感谢
    Axurez
        10
    Axurez  
       2019-04-30 15:58:55 +08:00
    伪造请求是不可能防止的。
    ochatokori
        11
    ochatokori  
       2019-04-30 16:43:03 +08:00 via Android
    postman 之类的是防不住的,不管要求什么都能伪造,你只能增加伪造成本

    跨域是浏览器的安全策略,除了浏览器什么都不是
    ochatokori
        12
    ochatokori  
       2019-04-30 16:50:15 +08:00 via Android
    至于增加伪造成本,比如
    1,检查 user agent 是不是浏览器(伪造也很简单
    2,复杂跨域请求是否有 options 请求(这是浏览器默认行为,但是攻击者不一定会做
    3,添加 token 验证
    lhx2008
        13
    lhx2008  
       2019-04-30 16:55:15 +08:00 via Android
    获取到所有数据是很正常的,因为这是一个 url,要增加获取数据的成本,就是反爬虫领域了。包括本地 js 检测是不是浏览器环境,和服务器协商一个 token, 服务端再验证,当然 js 本身也要混淆加密,加大破解难度
    JmmBite
        14
    JmmBite  
       2019-04-30 17:18:08 +08:00
    跨域只允许服务端白名单 IP 调用。

    客户端发起的话,一切皆可伪造,唯有难度系数不同。
    JmmBite
        15
    JmmBite  
       2019-04-30 17:19:38 +08:00
    服务端可以 N 层套娃,还得限制 IP 频次。
    shintendo
        16
    shintendo  
       2019-04-30 17:28:08 +08:00   ❤️ 1
    禁止跨域请求是浏览器对用户(而不是对你服务器)的保护措施,用户乐意的话可以让浏览器关闭这种保护,更不要说浏览器以外的客户端
    wmui
        17
    wmui  
    OP
       2019-04-30 17:54:37 +08:00
    感谢楼上各位,我得回去补习下反爬虫
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2879 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 08:55 · PVG 16:55 · LAX 00:55 · JFK 03:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.