如何在不使用签名URL的情况下阻止Amazon S3上的热链接?

时间:2009-06-04 06:12:35

标签: amazon-s3 hotlinking

有没有办法在不使用签名网址的情况下阻止Amazon S3上的热链接?

7 个答案:

答案 0 :(得分:19)

您需要一个存储桶策略,它允许来自您的域的引荐来源并拒绝不属于您的域的引荐来源。我发现,如果您不包含明确拒绝,图片可以热链接 - 许多指南和示例只是给出允许政策而不提及拒绝部分。

这是我的政策,只需将BUCKET-NAME和YOUR-WEBSITE更改为您自己的详细信息:

{
  "Version": "2008-10-17",
  "Id": "",
  "Statement": [
    {
      "Sid": "Allow in my domains",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::BUCKET-NAME/*",
      "Condition": {
        "StringLike": {
          "aws:Referer": [
            "http://www.YOUR-WEBSITE.com/*"
          ]
        }
      }
    },
    {
      "Sid": "Deny access if referer is not my sites",
      "Effect": "Deny",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::BUCKET-NAME/*",
      "Condition": {
        "StringNotLike": {
          "aws:Referer": [
            "http://www.YOUR-WEBSITE.com/*"
          ]
        }
      }
    }
  ]
}

答案 1 :(得分:11)

通过设置正确的S3存储桶策略,您可以添加引用策略以阻止热链接。

http://s3browser.com/working-with-amazon-s3-bucket-policies.php

答案 2 :(得分:3)

我使用Apache RewriteMap重新映射相关链接以选择文件扩展名 - * .jpg,* .gif,* swf,* .fla到Cloudfront。基本上使您的图像的网址作为您网站的相对链接。它并不能完全阻止发现S3 / cloudfront url,只会给小偷增加一层难度。

可能值得一试,通过htaccess应用上述方法的热链接限制。我自己没试过。

答案 3 :(得分:1)

有一个很好的教程here。请务必查看注释,因为网站代码中有一个空白字符,导致解决方案无效。

答案 4 :(得分:1)

它在official docs

examplebucket更改为您的广告管理名称,将example.com更改为您的域名。

"Version":"2012-10-17",
"Id":"http referer policy example",
"Statement":[
  {
    "Sid":"Allow get requests originating from www.example.com and example.com.",
    "Effect":"Allow",
    "Principal":"*",
    "Action":"s3:GetObject",
    "Resource":"arn:aws:s3:::examplebucket/*",
    "Condition":{
      "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
    }
  }
]
}

答案 5 :(得分:0)

Hotlinking是亚马逊创建Cloudfront的原因之一。 Cloudfront要快得多。我在上面写了一篇你可以看一下的文章。

http://blog.sat.iit.edu/2011/12/amazon-aws-s3-vs-cloudwatch-performance-grudgematch/

编辑:S3和Cloudfront都使用相同类型的存储桶策略来确保请求来自正确的网址。尽管如此,Cloudfront仍然更快。

答案 6 :(得分:-1)

不是真的。您可以通过它运行EC2实例和代理。