2013-10-12 55 views
-1

我正在製作一個社交網站,人們可以發佈只有他們的朋友才能看到的照片。我將圖像存儲在名爲照片的文件夾中。我希望圖像只能通過html標籤查看img,所以如果有人直接在瀏覽器中輸入img url,我希望它返回403/404或其他。我怎麼能用htaccess完成這件事?使用htaccess的圖片隱私

+0

搜索防止圖像盜鏈。不確定如何做到這一點,但會給你一些相關的答案。 – kais

+1

您提出的方法不會完成任務。您需要在應用程序層處理這種訪問。否則,有人可以很容易地欺騙一個引用標題並撕掉所有的圖像。 – Brad

+4

您無法可靠地分辨出作爲頁面加載的一部分發出GET請求的瀏覽器和將URL放入瀏覽器地址框中的人之間的區別。試圖通過.htaccess應用安全性可能會打敗你。您最好將圖像指向一個PHP腳本,該腳本可以在返回圖像之前檢查登錄狀態和訪問權限。 – 2013-10-12 23:58:19

回答

0

你不能做到這一點與htaccess的是恰當地指出了其他的答案,但是,您可以創建一個PHP腳本,控制誰可以訪問圖像,我們把它叫做imgsrc.php

$file = $_GET['file']; 

if(user_allowed_access($file)){ 
    $ext = substr($file, strrpos($file, '.') + 1); 
    header('Content-type: image/' . $ext); 
    readfile($file); 
} else { 
    header('Content-type: image/png'); 
    readfile('some/default/file.png'); 
} 

然後你<img>標籤已經SRC

<img src="/imgsrc.php?file=path/to/image.png" /> 

然後在你的.htaccess的圖像目錄把

Order deny, allow 
Deny from all 
Allow from localhost 

以上都未經過測試,但您應該明白

+0

小心這個;取決於你的user_allowed_access函數,可能沒有任何東西阻止某人使用相對路徑讓你的服務器提供應該隱藏的東西:

0

據我所知(有人請糾正我,如果你知道否則),這是不可能與htaccess,因爲它需要知道你是誰的朋友是讓他們看到圖像。

相反,你必須使用類似PHP的東西做一些cookie身份驗證,以找出請求者是誰,然後檢查他們的朋友/共同朋友等與圖像所有者,並且如果他們是這樣提供圖像允許看到它。雖然這是一個非常徵稅過程(它足夠硬服務靜態圖像,因爲它們!),所以一般的技術是使用長,尷尬的URL,所以他們不能被別人猜到並離開它(即允許什麼你試圖阻止)。

或者,再次使用PHP,檢查HTTP_REFERER標頭。如果從頁面內請求,它將被設置爲您的頁面URL。否則它將是空白或其他東西。這是不可靠的 - 但有些瀏覽器根本沒有發送它,反正它很容易被僞造。

或者,您可以強制執行一個時間窗口,在初始頁面加載的10秒內只能請求圖像。這對於連接速度慢的人來說是不好的。

基本上沒有什麼能夠阻止某人拍攝屏幕截圖或者在很多影像網站上流行拍攝,直接拍攝屏幕照片。

+0

我只想要。htaccess使圖像只能通過img標籤可見而不是通過瀏覽器直接通過url – user2840510

+0

不幸的是,這是不可能的,因爲htaccess無法區分img標籤和選項卡之間的區別 - 但是您可以查看Http Referer標頭,在img標籤中設置爲主頁面,在標籤頁中爲空白,但可能很容易被欺騙。 –