13

我在 Cloudfront 中创建了一个私有发行版以防止盗链。我设法用签名的 URL 创建了指向我的对象的链接,现在工作正常。

我唯一担心的是,我的 css 样式表中的图像链接不起作用,因为它们没有签名。因此,如果我有,例如:

background-image: url('../img/bg.png');

背景图像不会显示,因为样式表不包含签名的 url,因此 Cloudfront 拒绝提供内容。

我能做些什么来防止这种情况发生吗?

4

6 回答 6

6

让我退后一步,问一个基本问题:你真的担心别人盗用你的图片吗?真的吗?如果有人这样做,它将对您产生什么现实影响?真的吗?

如果您有正当理由阻止人们进行热链接,那么我不确定任何CDN 服务(在本例中为 CloudFront)是否适合您。

嘿,我只是说实话……</p>

于 2012-10-05T08:20:57.143 回答
1

有几种方法,每种方法都有缺点。

您可以通过模板(或其他一些将资源映射到 CloudFront 位置的智能方式)生成它,而不是静态 CSS 文件。您可以通过使用 Last-Modified 和 max-age Cache 标头在此处使用某种程度的缓存。最困难的解决方案,但可以说是最好的保护。

为所有 CSS 资源设置重定向路径,基本上是一个重写 CF 路径的小脚本(注意只重写 CSS 资源,别无其他)。这允许您保留当前的静态 CSS,但会打开重定向脚本的潜在热链接。

介于两者之间的东西可能是一个 cron 脚本,它生成带有在 1.5d 中过期的链接的静态 CSS 文件,以减少服务器负载。

于 2012-08-27T14:39:02.253 回答
1

为您的 css 文件使用私有分发通常是一个非常糟糕的主意,因为向 css url 添加(可能是不断变化的)到期时间和签名会阻止浏览器缓存它们,因此首先大大降低了使用 Cloudfront 的有用性。

即使您使用较长的过期时间,那么拼命想要热链接您的 css 背景图像的人也会简单地设置一个脚本来抓取您的 css 文件并从那里提取图像 url。

于 2012-10-06T15:23:41.943 回答
0

您可以每隔一两天轮换整个 CDN 主机名,然后您不必更改 css 中的任何内容(假设 css 位于示例中的 CDN 上)

http://www.explainthatstuff.com/blocking-cloudfront-hotlinks.html

这样你的 CSS 就不需要签名的 URL,你仍然可以有效地阻止盗链。

于 2012-09-01T21:06:33.473 回答
0

我最近才听说将 base64 编码为 html/css。有利有弊,但这可能正是您要寻找的: 将背景图像数据嵌入 CSS 作为 Base64 的好做法还是坏做法?

于 2012-10-10T14:58:20.223 回答
-1

<base>在你的 html 中使用标签怎么样?虽然没有尝试,但可能会有所帮助。

另一种选择是使用 php 生成样式表。例如,您获取所有图像的签名 url,然后将它们作为变量推送到样式元素。

于 2012-09-17T21:55:49.210 回答