好的,最好在这里举一个例子来说明我的意思.
想象一下基于Web的论坛系统,其中用户身份验证是通过系统知道的一些外部方法完成的.
现在,例如,用户输入他们无权访问的线程的URL.为此我应该返回403(Forbidden),让用户知道他们应该尝试另一种身份验证方法,或404,不要让他们知道有东西可以访问.
假设我返回403,当他们访问不存在的主题的URL时,我是否还应返回403?
编辑:上面的例子更像是IRL的一个例子.
另一个例子,说我暴露了类似的东西
/adminnotes/user
如果有关于用户的管理员注释.现在,返回403会让用户知道有关于他们的内容.404什么也不说.
但是,如果我要返回403 - 我可以将其返回给adminnotes/* - 这将解决该问题.
编辑2:另一个例子.软删除的问题在这里返回404.但是,通过正确的身份验证和访问,您仍然可以看到它们(我猜想)
最重要的是,遵守HTTP规范.返回403代替404并不是一件好事.返回404代替403可能是好的(或者不是大错),但我只是让软件说实话.如果用户只知道主题的ID,那么反正意义不大.他可以尝试计时攻击来确定这个主题是否存在.