防止Amazon Cloudfront热链接

Don*_*ins 20 amazon hotlinking amazon-cloudfront

我使用Amazon Cloudfront托管我所有网站的图像和视频,以便更快地为我的用户提供服务,这些用户遍布全球.我还将非常积极的前向缓存应用于Cloudfront上托管的元素,设置Cache-Controlpublic, max-age=7776000.

我最近发现我的烦恼是第三方网站正在与我的Cloudfront服务器进行热链接,以便在未经授权的情况下在自己的页面上显示图像.

我已经配置.htaccess为阻止我自己的服务器上的热链接,但是没有找到在Cloudfront上执行此操作的方法,这似乎本身不支持该功能.而且,令人讨厌的是,亚马逊的Bucket Policies(可用于防止热链接)仅对S3产生影响,它们对CloudFront分发没有影响[ link ].如果您想利用这些政策,您必须直接从S3提供内容.

在我的服务器日志中搜索hotlinkers并手动更改文件名并不是一个真实的选择,尽管我一直在这样做以结束最明显的攻击.

欢迎大家提出意见.

zim*_*atm 10

官方方法是为您的媒体使用签名网址.对于要分发的每个媒体片段,您可以生成特定的URL,该URL在给定的时间和源IP约束下工作.

静态页面的一种方法是为该页面中包含的媒体生成临时URL,其有效期为页面缓存时间的2倍.假设您的页面缓存时间为1天.每隔2天,链接将失效,这使得热门人员有义务更新他们的网址.它不是万无一失的,因为它们可以构建工具来自动获取新的URL,但它应该可以阻止大多数人.

如果您的页面是动态的,则无需担心会丢弃页面的缓存,因此您只需生成仅适用于请求者IP的URL.

  • 谢谢乔纳斯:不过,这是一个相当复杂的程序? (2认同)

Bla*_*ise 10

您可以将Referer标题转发到您的原点

  1. 转到CloudFront设置
  2. 编辑分发的"分配"设置
  3. 转到"行为"选项卡,然后编辑或创建行为
  4. 将转发标题设置为白名单
  5. 将Referer添加为白名单标题
  6. 保存右下角的设置

确保也在原点上处理Referer标题.

  • 我只能将"Origin","Access-Control-Request-Headers"和"Access-Control-Request-Methods"添加到白名单......此外,链接文档没有明确说明引用者... (2认同)
  • @Brett 我认为您弄错了,“您可以将 CloudFront 配置为将标头转发到源,这会导致 CloudFront 根据一个或多个请求标头中的值缓存对象的多个版本。” 请参阅 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html (2认同)

Har*_*rry 8

我们有很多热门链接问题.最后,我们为许多图像创建了css sprites.向底部/侧面添加空白区域或将图像组合在一起.

我们使用CSS在我们的页面上正确显示它们,但是除非他们复制了CSS/HTML,否则任何热链接都会错误地显示图像.

我们发现他们不打扰(或不知道如何).


Red*_*pia 5

自2015年10月起,您可以使用AWS WAF限制对Cloudfront文件的访问。这是AWS上的一篇文章,其中宣布了WAF,并说明了您可以使用该功能。这是一篇帮助我设置第一个ACL来限制基于引荐来源的访问权限的文章。

基本上,我创建了一个默认动作为DENY的新ACL。我添加了一个规则,用于检查我的域名的引荐来源标头字符串的结尾(小写)。如果通过该规则,则允许访问。

在将ACL分配给Cloudfront发行版之后,我尝试直接在Chrome中加载我的数据文件之一,但出现此错误:

在应用WAF ACL后尝试直接访问Cloudfront文件时的Chrome错误消息


小智 2

据我所知,目前还没有解决方案,但我有一些可能相关、可能不相关的建议......

第一:很多人在 Cloudfront 支持论坛上问过这个问题。例如,请参见此处此处。

显然,AWS 从热链接中受益:点击次数越多,他们向我们收取的费用就越多!我认为我们(Cloudfront 用户)需要启动某种精心策划的活动,让他们提供引用检查作为一项功能。

我想到的另一个临时解决方案是更改用于将流量发送到 cloudfront/s3 的 CNAME。假设您当前将所有图像发送至:

cdn.blahblahblah.com(重定向到某个 cloudfront/s3 存储桶)

您可以将其更改为 cdn2.blahblahblah.com 并删除 cdn.blahblahblah.com 的 DNS 条目

作为 DNS 更改,这将在其流量到达您的服务器之前淘汰当前正在热链接的所有人员:DNS 条目将根本无法查找。您必须不断更改 cdn CNAME 才能使其生效(例如每月一次?),但它会起作用。

这实际上是一个比看起来更大的问题,因为这意味着人们可以更轻松地抓取您网站页面的整个副本(包括图像) - 因此,您丢失的不仅仅是图像,也不仅仅是您为提供这些图像而付费。搜索引擎有时会得出结论,您的页面是副本,副本是原件......然后您的流量就会爆炸。

我正在考虑放弃 Cloudfront,转而采用战略定位的超快专用服务器(从一个地方向全世界提供所有内容),以便让我对此类事情有更多的控制权。

无论如何,我希望其他人有更好的答案!