2016-11-26 344 views
1

我使用一个名为images.example.com一个Amazon S3存储成功地通过CloudFlare的CDN使用URL一样提供内容:S3水桶的CloudFlare:防止盗链

https://images.example.com/myfile.jpg 

我想防止盗链图片和其他内容购买只限于引荐域名:example.com,也可能是另一个我用作开发服务器的域名。

我已经尝试了水桶政策,无论是从特定域允许和拒绝来自任何域不是特定的域:

{ 
"Version": "2012-10-17", 
"Id": "http referer policy example", 
"Statement": [ 
    { 
     "Sid": "Allow get requests referred by www.example.com", 
     "Effect": "Allow", 
     "Principal": "*", 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::images.example.com/*", 
     "Condition": { 
      "StringLike": { 
       "aws:Referer": [ 
        "http://www.example.com/*", 
        "http://example.com/*" 
        ] 
      } 
     } 
    }, 
    { 
     "Sid": "Explicit deny to ensure requests are allowed only from specific referer.", 
     "Effect": "Deny", 
     "Principal": "*", 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::images.example.com/*", 
     "Condition": { 
      "StringNotLike": { 
       "aws:Referer": [ 
        "http://www.example.com/*", 
        "http://example.com/*" 
        ] 
      } 
     } 
    } 
] 

}

为了测试这一点。我上传了不同的服务器上的一个小网页:www.notExample.com,我试图用热链接图像:

<img src="https://images.example.com/myfile.jpg"> 

但无论热链接的形象出现。

我也尝试以下CORS排除

<CORSConfiguration> 
    <CORSRule> 
    <AllowedOrigin>http://www.example.com</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

这些都不一直在努力防止盗链。我尝试使用桶策略和CORS的组合(一个或另一个加上两者)来清除CloudFlare中的缓存文件,但没有任何效果。

这似乎是一个相对简单的事情要做。我究竟做错了什么?

回答

3

Cloudflare是一种将信息缓存到最终用户的内容分发网络。

当用户通过Cloudflare访问内容时,内容将从Cloudflare的缓存中提供。如果内容不在缓存中,Cloudflare将检索内容,将其存储在缓存中并将其提供回原始请求。

因此,您的Amazon S3存储桶策略将不适用于Cloudflare,因为页面请求要么来自Cloudflare(不是用户的浏览器生成推荐人),要么直接从Cloudflare的缓存中提供(所以请求永远不会达到S3 )。

您需要将Cloudflare与您的引用规则配置,而不是S3。

参见:What does enabling CloudFlare Hotlink Protection do?

一些替代方案:

  • 使用Amazon CloudFront的 - 它通过使用签名的网址有能力serve private content - 你的应用程序可以通过创建HTML时产生一个特殊的URL授予访问权限页。
  • 直接从Amazon S3提供内容,它可以使用referer规则。 Amazon S3还支持您的应用程序可以生成的pre-signed URLs
+0

感谢您的解释。我猜想在cloudflare的网站上使用s3的cloudflare文章与授权访问s3而不是限制访问有关。不幸的是,似乎热链接保护仅适用于图像,而不适用于自身托管的音频和视频文件,这是主要的热链接/带宽问题。 – dijon

+0

我为您添加了一些替代选项。 –