不想让用户知道正在访问的页面是真的不存在还是没有权限访问。我觉得 403 更合适,但貌似更多网站用 404 ,例如 GitHub 未登录访问私有库返回的就是 404 。这有什么好处?
|      1golangLover      2022-03-29 14:43:53 +08:00 via Android 因为你告诉别人 403 就是告诉别人这其实有路由,只是不让你进来,黑客可能透过具路由猜你其他存在的路径 | 
|  |      2chendy      2022-03-29 14:47:55 +08:00 404 直接不告诉用户这个东西存在 403 用来表示没有权限,可能暗示“可以去申请权限”,类似 401 可以“引导用户去登陆”一样 | 
|  |      3rv54ntjwfm3ug8 OP @golangLover #1 我的意思是一个路由下的页面不管是否存在,只要没权限全部返回 403 | 
|  |      4learningman      2022-03-29 14:54:09 +08:00 403 可以通过遍历来进行路径猜测,如果统一 403 那就违反了 http code 的语义 | 
|      5lolizeppelin      2022-03-29 14:58:25 +08:00 我觉得业务层面按标准来最好 至于安全防护..给外面的设备或者 nginx 层来过滤处理 由外部将 403 转 404 | 
|  |      6yuzo555      2022-03-29 15:00:53 +08:00 403 啊,就算存在你也没权限啊。。 | 
|      7wenzhonghu      2022-03-29 15:14:55 +08:00 这里不是一样吗? 本质上就是无论情况 A 还是情况 B ,统一返回 C (或 D)。只要保持 C 或 D ,那别人自然无法推测出到底是情况 A 还是情况 B ,和你的返回值无关。 | 
|  |      8wjx0912      2022-03-29 15:17:39 +08:00 既有可能无权限也有可能真的不存在,意思是有可能存在,403 吧 | 
|      9wenzhonghu      2022-03-29 15:22:07 +08:00 从具体语义来说,应该说 GitHub 做的更好。 对不存在的页面返回 403 显然是误导的(当然除非你故意误导),这会导致有权限的用户不小心了输错了 URL 后,误以为自己的权限不够。 对于 GitHub 来说,如果你直接的获得了一个 repo 的 URL 并且进行访问,那么就默认了这是一个公开 repo 。 如果你这个库是私有的(并且没有共享给你),那么对于你来说就是不存在,而不是权限不够。因为通常意义上,对于私有库的只读访问是不存在权限概念的。取而代之的是共享的概念。所以在这种情况下,返回 404 是符合语义的。 | 
|  |      10westoy      2022-03-29 15:23:34 +08:00 403 不是本地无银三百两么 真想隐藏 404 啊, 而且还得保证和静态文件返回的是一样, 也不要输出含一些框架标识的特殊 http 头 不过就算 404, 其实通过时序攻击,也能测出来是不是真页面的 | 
|      11wenzhonghu      2022-03-29 15:24:07 +08:00  1 对于 GitHub 来说,404 就是 404 , 意味着该页面(库)事实上对你而言不存在。 | 
|      12Huelse      2022-03-29 15:33:42 +08:00 当你犹豫不决的时候,请按事实操作 | 
|      13wudaye      2022-03-29 19:42:08 +08:00 楼上说得都对 | 
|  |      14adoal      2022-03-29 21:25:36 +08:00 面对认真的攻击,全 403 并不会更安全。 | 
|  |      15pckillers      2022-03-30 15:49:40 +08:00 面对真正的攻击,不是给 302 跳转到特定内容的报错页然后给 200 状态码+随机内容的反馈+显示 404 的图片,更加能拖垮爬虫么? | 
|      16julyclyde      2022-03-30 16:02:36 +08:00 gitlab 是给 404 的 用起来感觉很怪异 |