gpt4 book ai didi

rest - 对于不存在的REST资源,什么时候返回404,什么时候返回403?

转载 作者:行者123 更新时间:2023-12-05 01:44:35 28 4
gpt4 key购买 nike

我很熟悉这个逻辑,如果你想用用户名和密码验证某人的身份,你应该返回相同的错误,无论是找不到用户名,还是密码错误。这个想法是,如果您返回单独的“找不到用户”和“找到用户,但密码错误”错误,攻击者可以尝试所有用户名并找出哪些用户名有效,然后仅将他们的字典攻击集中在这些用户名上.

通过 REST 服务,我有一个只有特定用户可以访问的资源,我们称它为 /foo/{id}。于是就有了各种情况:

  1. 用户尝试访问 /foo/4 并且他们有访问权限,他们显然得到了 200 响应和资源。

  2. 用户尝试访问 /foo/3 但它不存在。 (我不知道如果它确实存在他们是否可以访问它,因为它不存在。想想 Facebook 上不存在的照片,照片只有在存在时才有所有权信息。)

    <
  3. 用户尝试访问 /foo/4,它存在,但他们没有访问权限。

所以我的问题是,在情况 2 和情况 3 中返回什么返回码?据我所知,有以下选项:

  1. 情况 2 返回 404,情况 3 返回 403。但这意味着攻击者可以找出存在哪些对象,类似于第一个示例中的密码示例。

  2. 所有例子都返回404,毕竟从用户的角度来看,他们无权访问的资源“不存在”,如果他们列出他们有权访问该资源的所有资源不会在列表中。

  3. 对所有示例返回 403。

你会怎么做?这里的标准是什么?

最佳答案

What is the standard here?

HTTP Semantics 15.5.4

An origin server that wishes to "hide" the current existence of a forbidden target resource MAY instead respond with a status code of 404 (Not Found).

有趣的是,在 HTTP/1.0 中, 这是转过来的

If the server does not wish to make this information available to the client, the status code 403 (forbidden) can be used instead.

你应该知道 403 和 404 有 different default caching behavior .

OWASP: Exception Handling

When reviewing error responses be careful that a malicious user is not able to glean any potentially sensitive information about the system from the status code returned. For example: an API search that takes a tenant ID parameter and returns an HTTP 404 response for no results, and an HTTP 500 response if the tenant ID does not exist. An attacker could potentially leverage this information to determine if a tenant ID is valid or not. One solution would be to catch the exception thrown when a supplied tenant ID does not exist, and return an HTTP 404 status code with the error response.

请注意,状态代码并不是响应中唯一可以被利用的部分;如果您要完成对齐状态代码的工作,您还应该确保消息正文和 header 也不会泄露任何内容,即 the timing of the response不会泄露节目,等等。

关于rest - 对于不存在的REST资源,什么时候返回404,什么时候返回403?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45409035/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com