2011-04-13 123 views
19

我使用Amazon Cloudfront託管我所有網站的圖片和視頻,以更快地爲我的用戶提供服務,這些用戶在全球各地都很分散。我還對Cloudfront上託管的元素應用非常積極的前向緩存,將Cache-Control設置爲public, max-age=7776000防止亞馬遜Cloudfront盜鏈

我最近發現我的煩惱,第三方網站是盜鏈我的Cloudfront服務器,以顯示自己的網頁上的圖像,未經授權。

我已配置.htaccess以防止在我自己的服務器上進行盜鏈,但尚未找到在Cloudfront上執行此操作的方法,但似乎本機不支持該功能。令人煩惱的是,亞馬遜的桶策略可用於防止盜鏈,它只對S3有效,它們對CloudFront的發佈沒有影響[link]。如果您想利用您必須直接從S3提供內容的策略。

淘汰我的服務器日誌熱點和手動更改文件名不是一個現實的選擇,雖然我一直這樣做,以結束最明目張膽的犯罪。

任何建議將受到歡迎。

回答

2

據我所知,目前還沒有解決辦法,但我有幾個可能相關,可能是不相關的建議......

第一:許多人都問這個就的Cloudfront支持論壇。例如,參見herehere

很明顯AWS可以從盜鏈中受益:更多的命中,他們對我們的收費越多!我認爲我們(Cloudfront用戶)需要開展某種精心策劃的活動,讓他們提供引用檢查功能。

我想過的另一個臨時解決方案是更改用於將流量發送到cloudfront/s3的CNAME。所以我們可以說你現在所有的圖像發送至:

cdn.blahblahblah.com(其重定向到一些CloudFront的/ S3桶)

你可以將其更改爲cdn2.blahblahblah.com和刪除DNS條目cdn.blahblahblah.com

作爲一項DNS更改,在他們的流量到達您的服務器附近任何地方之前,這會將當前所有盜鏈的人都擊倒:DNS條目根本無法查找。您必須不斷改變cdn CNAME才能使其生效(例如每月一次?),但它會起作用。

這實際上是一個比看起來更大的問題,因爲這意味着人們可以更容易地抓取網站頁面的整個副本(包括圖像) - 所以這不僅僅是您丟失的圖像,而且不僅僅是您支付提供這些圖像。搜索引擎有時會得出結論,你的網頁是副本,副本是原件......並且讓你的流量砰砰響。

我想放棄Cloudfront,轉而選擇戰略定位,超快速的專用服務器(從一個地方向全世界提供所有內容),讓我對這些事情有更多的控制權。

無論如何,我希望別人有更好的答案!

+0

非常感謝這些意見。聽起來像現在沒有適當的解決方案。手動更改網址是可行的,但相當勞動密集型!我希望亞馬遜能想出一個更好的方法。 – 2011-04-20 20:06:56

+0

如果更改CNAME,則不需要更改URL。您可以使用301重定向來捕捉舊CNAME中的引薦,一段時間後,您可以在切換到新的CNAME之前(告訴搜索引擎您已經走了)。如果有人閱讀並想知道我的意思是CDN CNAME,那麼Paul Stamatiou的指南「如何:Amazon Cloudfront入門」對此有很好的解釋[http://paulstamatiou.com/how-to-getting-started-with -amazon-cloudfront],這是我找到的實現Cloudfront CDN的最簡單,最清晰的指南。 – 2011-04-21 06:21:33

+0

我喜歡DNS的建議,定期刪除所有的熱門鏈接:) – 2012-01-09 09:18:22

8

我們有無數的盜鏈問題。最後,我們爲許多圖像創建了css精靈。將空白添加到底部/側面或將圖像組合在一起。

我們使用CSS在頁面上正確顯示了它們,但任何熱鏈接都會錯誤地顯示圖像,除非它們複製了CSS/HTML。

我們發現他們不打擾(或不知道如何)。

9

官方的做法是使用signed urls爲您的媒體。對於要分發的每個媒體片段,您可以生成特製的url,該url在給定的時間和源IP約束下工作。

靜態頁面的一種方法是爲包含在該頁面中的媒體生成臨時URL,這些URL在頁面的緩存時間內有效期爲2倍。假設您的網頁的緩存時間爲1天。每兩天,鏈接將失效,這就要求熱門網站更新他們的網址。這不是萬無一失的,因爲他們可以構建工具來自動獲取新的URL,但它會阻止大多數人。

如果你的頁面是動態的,你不需要擔心垃圾頁面的緩存,所以你可以簡單地生成只爲請求者的IP工作的URL。

+1

感謝喬納斯:這是一個相當複雜的過程,但? – 2011-11-22 19:13:07

+0

如何在生成簽名url時訪問請求者ip? – crazyCoder 2017-01-31 00:27:50

8

You can forward the Referer header to your origin since June 26!

  1. 轉到CloudFront的設置
  2. 的分佈
  3. 轉到行爲選項卡,並編輯編輯分佈設置或者創建一個行爲
  4. 往前行頭到白名單
  5. 添加Referer作爲白名單標題
  6. 將設置保存在右下角

請確保同時處理源自您的Referer標頭。

+2

我只能將'Origin','Access-Control-Request-Headers'和'Access-Control-Request-Methods'添加到白名單中......並且鏈接的文檔不會明確指出有關引用者的任何內容...... – 2015-07-09 13:27:14

+1

@BernhardVallant你應該可以看到選項[這裏](http://i.imgur.com/OqR0kMT.png)。如果不是的話,那可能是因爲你的價格計劃。 – GFoley83 2015-09-21 23:01:00

3

截至2015年10月,您可以使用AWS WAF限制對Cloudfront文件的訪問。 Here's an article from AWS宣佈WAF並解釋你可以用它做什麼。 Here's an article,它幫助我設置了我的第一個ACL,以根據引用來限制訪問。

基本上,我創建了一個默認動作爲DENY的新ACL。我添加了一個規則,用於檢查我的域名(小寫)的referer頭字符串的末尾。如果它通過該規則,它允許訪問。

分配我的ACL我的Cloudfront分配後,我試圖加載我的數據文件的一個直接在Chrome和我得到這個錯誤:

Chrome error message when trying to access a Cloudfront file directly after applying a WAF ACL

0

這個問題提到的圖像和視頻文件。
引用者檢查不能用於保護多媒體資源免受盜鏈,因爲當請求使用HTML5播放的音頻或視頻文件時,某些移動瀏覽器不會發送引用者標頭。
我相信iPhone和Safari上的Safari和Chrome以及Android上的Safari。
太糟糕了!謝謝你,蘋果和谷歌。

0

如何使用簽名cookie?使用自定義策略創建簽名的cookie,該策略還支持您要設置的各種限制,並且它是通配符。