防止图像热链接但允许直接访问

时间:2013-02-25 11:42:33

标签: amazon-web-services amazon-s3

我使用Amazon S3存储我网站的图片。我有一个存储桶策略可以阻止其他网站热链接我的图像。

要使此功能生效,我在S3中将文件权限设置为“私有”,然后存储桶策略才会打开访问我网站的权限。

这很好用,但因为文件是“私有的”我无法直接在浏览器中查看图像,这是我想要允许的。

这是政策

{
  "Version": "2008-10-17",
  "Id": "preventHotLinking",
  "Statement": [
    {
      "Sid": "1",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::mybucket/*",
      "Condition": {
        "StringLike": {
          "aws:Referer": [
            "http://mydomain.com/*",
            "http://www.mydomain.com/*"
          ]
        }
      }
    }
  ]
}

所以,总结一下:

  • 文件本身设置为私有
  • 上述政策允许图片显示在域名“mydomain.com”的页面上,但不会显示在“someoneelsesdomain.com”上

这也会阻止直接访问,因此将http://jbtestyt.s3.amazonaws.com/archie.jpg粘贴到浏览器中不会显示图像(因为它是私有的)。

但我想要显示图像以便直接访问。

可能解决方案是将文件公开,然后拒绝除我列出的所有引用之外的所有引用?但我不确定,也找不到那样的东西。

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

我推断你正在寻找一个“本机”S3解决方案,所以这里就是这样。如果你真的想到它,hotlinking本质上是“直接访问”文件。因此,“文件本身设置为私有”将始终确保(至少在AWS上)无论如何都无法直接访问它。这是S3的设计。您建议白名单引用者可能是您仅使用S3实现此目的的唯一直接方式。