我使用Amazon Cloudfront托管我网站的所有图片和视频,以便更快地为我的用户提供服务,这些用户遍布全球。我还对Cloudfront上托管的元素应用了非常积极的前向缓存,将Cache-Control
设置为public, max-age=7776000
。
我最近发现第三方网站正在热链接到我的Cloudfront服务器,以便在未经授权的情况下在自己的网页上显示图片。
我已经配置.htaccess
以阻止我自己的服务器上的热链接,但是还没有找到在Cloudfront上执行此操作的方法,这似乎不支持本机功能。而且,令人讨厌的是,亚马逊的Bucket Policies(可用于防止热链接)仅对S3产生影响,它们对CloudFront分发[link]没有影响。如果您想利用这些政策,您必须直接从S3提供内容。
搜索我的服务器日志以查找hotlinkers并手动更改文件名并不是一个真实的选择,尽管我一直这样做是为了结束最明显的攻击。</ p>
欢迎任何建议。
答案 0 :(得分:10)
<强> You can forward the Referer
header to your origin 强>
确保也在原点上处理Referer标题。
答案 1 :(得分:9)
官方方法是将signed urls用于您的媒体。对于要分发的每个媒体片段,您可以生成特定的URL,该URL在给定的时间和源IP约束下工作。
静态页面的一种方法是为该页面中包含的媒体生成临时URL,其有效期为页面缓存时间的2倍。假设您的页面缓存时间为1天。每隔2天,链接将失效,这使得热门人员有义务更新他们的网址。这不是万无一失的,因为他们可以构建自动获取新网址的工具,但它应该可以阻止大多数人。
如果您的网页是动态的,您无需担心会丢弃网页的缓存,因此您只需生成仅适用于请求者IP的网址。
答案 2 :(得分:8)
我们遇到过很多热链接问题。最后,我们为许多图像创建了css sprites。向底部/侧面添加空白区域或将图像组合在一起。
我们使用CSS在我们的页面上正确显示它们,但是除非他们复制了CSS / HTML,否则任何热链接都会错误地显示图像。
我们发现他们不打扰(或不知道如何)。
答案 3 :(得分:5)
截至2015年10月,您可以使用AWS WAF限制对Cloudfront文件的访问。 Here's an article from AWS宣布WAF并解释你可以用它做什么。 Here's an article帮助我设置了第一个ACL,以根据引荐来限制访问权限。
基本上,我创建了一个新的ACL,其默认操作为DENY。我添加了一个规则,检查我的域名(小写)的referer头字符串的结尾。如果它通过了该规则,则允许访问。
将我的ACL分配给我的Cloudfront发行版后,我尝试直接在Chrome中加载我的一个数据文件,我收到了此错误:
答案 4 :(得分:2)
据我所知,目前还没有解决方案,但我有一些可能相关的,可能无关的建议......
首先:很多人在Cloudfront支持论坛上问过这个问题。例如,请参阅here和here。
很明显,AWS受益于热链接:点击次数越多,我们就越多收取费用!我认为我们(Cloudfront用户)需要启动某种严格协调的广告系列,以便让他们提供引荐检查作为功能。
我想到的另一个临时解决方案是更改我用来向Cloudfront / s3发送流量的CNAME。因此,假设您目前将所有图片发送至:
cdn.blahblahblah.com(重定向到某个cloudfront / s3存储桶)
您可以将其更改为cdn2.blahblahblah.com并删除cdn.blahblahblah.com的DNS条目
作为DNS更改,这会在当前流量到达服务器附近之前淘汰当前正在进行热链接的所有人:DNS条目将无法查找。你必须不断更改cdn CNAME以使其有效(比如每月一次?),但它会起作用。
这实际上是一个比看起来更大的问题,因为这意味着人们可以更轻松地抓取您网站页面的整个副本(包括图像) - 所以这不仅仅是您丢失的图像,而不仅仅是您付费服务那些图像。搜索引擎有时会断定您的页面是副本,副本是原件......并且会让您的流量变得流畅。
我正在考虑放弃Cloudfront,转而选择具有战略意义的超快速专用服务器(从一个地方向全世界提供所有内容),让我对这些事情有更多的控制。
无论如何,我希望别人有更好的答案!
答案 5 :(得分:0)
这个问题提到了图像和视频文件
引用程序检查不能用于保护多媒体资源免受热链接,因为某些移动浏览器在请求使用HTML5播放的音频或视频文件时不会发送引用标头。
我确信iPhone上的Safari和Chrome以及Android上的Safari
太糟糕了!谢谢你,Apple和Google。
答案 6 :(得分:0)
使用签名cookie怎么样?使用自定义策略创建签名cookie,该策略还支持您要设置的各种限制,也是通配符。