• 请不要在回答技术问题时复制粘贴 AI 生成的内容
rv54ntjwfm3ug8
V2EX  ›  程序员

既有可能无权限也有可能真的不存在的页面返回 403 还是 404 好?

  •  
  •   rv54ntjwfm3ug8 · Mar 29, 2022 · 2396 views
    This topic created in 1537 days ago, the information mentioned may be changed or developed.

    不想让用户知道正在访问的页面是真的不存在还是没有权限访问。我觉得 403 更合适,但貌似更多网站用 404 ,例如 GitHub 未登录访问私有库返回的就是 404 。这有什么好处?

    16 replies    2022-03-30 16:02:36 +08:00
    golangLover
        1
    golangLover  
       Mar 29, 2022 via Android
    因为你告诉别人 403 就是告诉别人这其实有路由,只是不让你进来,黑客可能透过具路由猜你其他存在的路径
    chendy
        2
    chendy  
       Mar 29, 2022
    404 直接不告诉用户这个东西存在
    403 用来表示没有权限,可能暗示“可以去申请权限”,类似 401 可以“引导用户去登陆”一样
    rv54ntjwfm3ug8
        3
    rv54ntjwfm3ug8  
    OP
       Mar 29, 2022
    @golangLover #1 我的意思是一个路由下的页面不管是否存在,只要没权限全部返回 403
    learningman
        4
    learningman  
       Mar 29, 2022
    403 可以通过遍历来进行路径猜测,如果统一 403 那就违反了 http code 的语义
    lolizeppelin
        5
    lolizeppelin  
       Mar 29, 2022
    我觉得业务层面按标准来最好

    至于安全防护..给外面的设备或者 nginx 层来过滤处理
    由外部将 403 转 404
    yuzo555
        6
    yuzo555  
       Mar 29, 2022
    403 啊,就算存在你也没权限啊。。
    wenzhonghu
        7
    wenzhonghu  
       Mar 29, 2022
    这里不是一样吗?

    本质上就是无论情况 A 还是情况 B ,统一返回 C (或 D)。只要保持 C 或 D ,那别人自然无法推测出到底是情况 A 还是情况 B ,和你的返回值无关。
    datadump
        8
    datadump  
       Mar 29, 2022
    既有可能无权限也有可能真的不存在,意思是有可能存在,403 吧
    wenzhonghu
        9
    wenzhonghu  
       Mar 29, 2022
    从具体语义来说,应该说 GitHub 做的更好。

    对不存在的页面返回 403 显然是误导的(当然除非你故意误导),这会导致有权限的用户不小心了输错了 URL 后,误以为自己的权限不够。

    对于 GitHub 来说,如果你直接的获得了一个 repo 的 URL 并且进行访问,那么就默认了这是一个公开 repo 。

    如果你这个库是私有的(并且没有共享给你),那么对于你来说就是不存在,而不是权限不够。因为通常意义上,对于私有库的只读访问是不存在权限概念的。取而代之的是共享的概念。所以在这种情况下,返回 404 是符合语义的。
    westoy
        10
    westoy  
       Mar 29, 2022
    403 不是本地无银三百两么

    真想隐藏 404 啊, 而且还得保证和静态文件返回的是一样, 也不要输出含一些框架标识的特殊 http 头

    不过就算 404, 其实通过时序攻击,也能测出来是不是真页面的
    wenzhonghu
        11
    wenzhonghu  
       Mar 29, 2022   ❤️ 1
    对于 GitHub 来说,404 就是 404 , 意味着该页面(库)事实上对你而言不存在。
    Huelse
        12
    Huelse  
       Mar 29, 2022
    当你犹豫不决的时候,请按事实操作
    wudaye
        13
    wudaye  
       Mar 29, 2022
    楼上说得都对
    adoal
        14
    adoal  
       Mar 29, 2022
    面对认真的攻击,全 403 并不会更安全。
    pckillers
        15
    pckillers  
       Mar 30, 2022
    面对真正的攻击,不是给 302 跳转到特定内容的报错页然后给 200 状态码+随机内容的反馈+显示 404 的图片,更加能拖垮爬虫么?
    julyclyde
        16
    julyclyde  
       Mar 30, 2022
    gitlab 是给 404 的
    用起来感觉很怪异
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2627 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 01:21 · PVG 09:21 · LAX 18:21 · JFK 21:21
    ♥ Do have faith in what you're doing.