我在Cloudfront中创建了一个私有分发以防止热链接。我设法使用签名URL创建指向我的对象的链接,现在工作正常。
我唯一担心的是,我的css样式表中的图片链接无效,因为它们没有签名。所以如果我有,例如:
background-image: url('../img/bg.png');
由于样式表不包含已签名的网址,因此背景图片不会显示,因此,Cloudfront拒绝提供内容。
我能做些什么来阻止这种情况吗?
答案 0 :(得分:5)
让我退后一步,问一个基本问题:你是否真的担心人们会将你的图片链接起来? 真的吗?如果有人这样做,它会对你产生什么样的现实影响? 真的?
如果您有正当理由阻止人们进行热链接,那么我不确定任何 CDN服务(在这种情况下,CloudFront)是适合您的解决方案。
嘿,我只是诚实......答案 1 :(得分:1)
有几种方法,每种都有缺点。
而不是静态CSS文件,您可以从模板(或其他一些智能方式将资源映射到CloudFront位置)生成它。您可以使用Last-Modified和max-age Cache标头在此处使用某种程度的缓存。最难的解决方案,但可以说是最好的保护。
为所有CSS资源设置重定向路径,基本上是一个重写CF路径的小脚本(注意只重写CSS资源而不重写其他内容)。这允许您保留当前的静态CSS,但会打开重定向脚本的潜在热链接。
介于两者之间的内容可能是生成静态CSS文件的cron脚本,其链接在1.5d内到期)以减少服务器负载。
答案 2 :(得分:1)
对你的css文件使用私有发行版通常是一个非常糟糕的主意,因为在css url中添加(可能是不断变化的)到期时间和签名会阻止浏览器缓存它们,因此大大降低了在第一次使用Cloudfront时的实用性的地方。
即使你使用了很长的过期时间,那么拼命想要将你的css背景图像热链接的人只需设置一个脚本来抓取你的css文件并从那里提取图像网址。
答案 3 :(得分:0)
你可以每天或每两天轮换整个CDN主机名,然后你不必更改css中的任何内容(假设css在CDN上,从示例中看起来像)
http://www.explainthatstuff.com/blocking-cloudfront-hotlinks.html
然后您的CSS不需要签名的网址,您仍然可以有效地阻止热链接。
答案 4 :(得分:0)
我刚刚听说过将base64编码转换为html / css。有利有弊,但它可能是你想要的: Is embedding background image data into CSS as Base64 good or bad practice?
答案 5 :(得分:-1)
如何在yr html中使用<base>
标记?
虽然没有尝试,但可能有所帮助。
另一种选择是使用php生成样式表。例如,您获取所有图像的签名URL,然后将它们作为变量推送到样式元素。