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