【发布时间】:2009-06-04 06:12:35
【问题描述】:
有什么方法可以在不使用签名 URL 的情况下防止 Amazon S3 上的热链接?
【问题讨论】:
标签: amazon-s3 hotlinking
有什么方法可以在不使用签名 URL 的情况下防止 Amazon S3 上的热链接?
【问题讨论】:
标签: amazon-s3 hotlinking
您需要一个存储桶策略,既允许来自您的域的引荐来源,又拒绝不来自您的域的引荐来源。我发现如果您不包含明确的拒绝,图像可能会被热链接 - 许多指南和示例仅提供允许策略而没有提及拒绝部分。
这是我的政策,只需将 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/*"
]
}
}
}
]
}
【讨论】:
通过设置正确的 S3 存储桶策略,您可以添加引用策略以防止盗链。
http://s3browser.com/working-with-amazon-s3-bucket-policies.php
【讨论】:
我使用 Apache RewriteMap 重新映射相关链接以选择文件扩展名 - *.jpg、*.gif、*swf、*.fla 到 Cloudfront。基本上使您的图像的网址显示为您网站的相对链接。它并不能完全阻止 S3/cloudfront url 的发现,只是为可能的小偷增加了一层难度。
可能值得一试,使用上述方法通过 htaccess 应用热链接限制。我自己没试过。
【讨论】:
在他们的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/*"]}
}
}
]
}
【讨论】:
有一个很好的教程here。请务必检查 cmets,因为网站代码中有一个空格字符会导致解决方案不起作用。
【讨论】:
Hotlinking 是 Amazon 创建 Cloudfront 的原因之一。 Cloudfront 要快得多。我写了一篇文章,你可以看看这里。
http://blog.sat.iit.edu/2011/12/amazon-aws-s3-vs-cloudwatch-performance-grudgematch/
编辑:S3 和 Cloudfront 都使用相同类型的存储桶策略来确保请求来自正确的 url。不过,Cloudfront 仍然更快。
【讨论】:
不是真的。您可以通过它运行 EC2 实例和代理。
【讨论】: