2012-12-01 121 views
0

我有一個名爲 - 的圖像。該文件夾包含用戶個人資料圖片現在用戶可以隨時通過將圖像URL複製到他的瀏覽器來查看他的圖像。這樣他也可以看到其他用戶的個人資料照片。我想要實現的是 - 用戶應該只能通過我網站上的PHP頁面查看他的個人資料照片。如果用戶直接放置圖片網址,則不應顯示。防止使用瀏覽器url直接訪問圖像

我試圖用.htaccess來實現這個功能。這是我在.htaccess文件中有:

RewriteEngine On 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mysite.com/ 
RewriteRule \.(gif|jpg)$ http://www.mysite.com/errorpost.jpg [R,L] 

我是新的.htaccess。如果有辦法實現這一點,請幫助。

在此先感謝。

+0

我使用的上述方法不起作用。它仍然顯示圖像url輸入時的圖像。 –

+0

看看這可以幫助你: http://stackoverflow.com/questions/9282124/deny-direct-access-to-a-folder-and-file-by-htaccess – Robyflc

+0

什麼是你想的問題解決。你想阻止人們查看個人資料的個人資料圖像,他們不允許看到? – Gerben

回答

1

我有同樣的問題。目前,我發現了2種方式:

1)BASE64_ENCODE()+ AJAX + JS/jQuery的

  • 存儲在二進制文件或數據庫外部WWW文件夾BASE64_ENCODE()編碼的每幅圖像。
  • 使用ajax獲取該數據。它應該返回 「數據:圖像/ JPEG; BASE64,$ enc_imgbinary」
  • 替換的 'IMG' src'中使用的js與返回的結果屬性/ jQuery的

利弊

  • 無法訪問與直接鏈接圖像

利弊

  • 我沒有發現視頻的類似解決方案。
  • 圖像應事先編碼(或第一次使用),以最大限度地減少服務器CPU使用率。
  • 編碼圖像佔用磁盤空間大約多30%=> 1.3x磁盤空間
  • 如果要在服務器上保留原始圖像=> 2.3x磁盤空間。
  • 〜30%以上的數據將通過網絡

2)長的隨機名稱(+符號鏈接)被髮送

A)使用長的隨機名稱
在WWW文件夾存儲圖像B)將符號鏈接到www文件夾外的圖像存儲到www文件夾。 (外WWW圖像也可以作爲你的桌面映像備份)

筆記:

  • 文件夾,還必須包含隨機符號
  • 使用」。'前的任何文件夾或文件名=>以防萬一,從上的未配置apache的顯示文件夾內容
  • 配置Apache以folow中在情況B符號鏈接防止)(添加FlowSymlinks到的httpd.conf)
  • 配置Apache,以防止夾內容列表(從httpd.conf中刪除索引)圖像層次
  • 例如:

    • WWW
      • .media_jmdue7jed
        • .user1_hash_!sdfsewewfsdfsds
          • .album1_name_!jfie8e7y77667fef
            • .photo1_name_!kjio9i890v8fsd978fyreshf
            • .photo2_name_!09098dfuujdsif87s7ysdffd
            • ...
          • .album2_name_!ghhyuflp!huidfjh
            • .photo1_name_!feojihudhufuuhfrufhi8484
            • .photo2_name_!2344gfdgfdgdfefedw232sdg
            • ...
        • .user1_hash_!j333re89dsfdsf
          • ...

優點:

  • 可用於視頻也
  • 您仍然可以通過創建採用長隨機名稱的符號鏈接到www文件夾保持與WWW文件夾以外的原始名稱的原始圖像。每個用戶甚至都不同。
  • 圖片可以在服務器外使用(在論壇上,快速直接發送鏈接給您的朋友或類似)

利弊

  • 符號鏈接必須事先創建(或飛)
  • 圖片可通過直接鏈接訪問
    • 但是它幾乎無法猜測它
    • 你也可以改變符號鏈接運行DOM名periodicaly或肖像權的變化(我quess谷歌+這樣做)
  • 地圖原來的名稱→長隨機名稱應存放在數據庫(或sidecard /元文件)
    • (可如果你保持原有名稱裏面長隨機名稱的編碼/解碼或通過合併原名稱+長隨機名稱)

==========被繞過===========================

我已經實現了案例1),它對我很好,但我沒有找到類似的HTML5視頻解決方案。

案例2)似乎更加靈活。但是我仍然不確定安全。 如果有人看到安全漏洞,請讓我知道。