我正在使用 S3 来存储一些业务关键文档。我希望存储桶在尝试访问存储桶中不存在的对象时返回 404 状态代码。
然而,我发现它不断返回我“403
以下是使用 S3 网站 URL 的会话示例。
> GET /foobar.txt HTTP/1.1
> User-Agent: curl/7.21.6 (x86_64-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3
> Host: <bucketname>.s3-website-us-east-1.amazonaws.com
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< Last-Modified: Mon, 09 Sep 2013 19:10:28 GMT
< ETag: "14e13b81b3ce5b129d1f206b3e514885"
< x-amz-error-code: AccessDenied
< x-amz-error-message: Access Denied
< x-amz-request-id: <snip>
< x-amz-id-2: <snip>
< Content-Type: text/html
< Content-Length: 11
< Date: Thu, 26 Sep 2013 20:01:45 GMT
< Server: AmazonS3
<
Not found!
请注意,“未找到!”字符串来自启用 S3 网站托管时在存储桶属性上设置的错误文档。
我也尝试过直接使用bucket url进行访问
http://.s3.amazonaws.com/
返回的结果相同,只是我得到的是 XML 文档,而不是错误文档
我该如何解决这个问题?
当用户无权列出存储桶内容时,S3 返回 403 而不是 404。
如果您查询一个对象并收到 404,那么您就知道该对象不存在。如果您没有列出存储桶内容的权限,那么您不应该知道这些信息,因此 S3 不会告诉您该存储桶不存在,而是会告诉您您正在尝试执行不允许执行的操作。当您收到 403 而不是 404 时,您无法知道您请求的对象不存在。它可能不存在,也可能存在但您没有访问它的权限。您无法确定,因此不会绕过任何安全措施。
我相信任何有权列出存储桶内容的人都会得到 404 而不是 403。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)