2013-11-07 35 views
1

在Web應用程序進行改造我想拒絕其他用戶的圖像直接訪問圖像,我已經實現它在我的主要.htaccess文件添加以下代碼:如何拒絕其他用戶上傳的圖片訪問?

RewriteCond %{HTTP_COOKIE} !PHPSESSID=(.+) [OR,NC] 
RewriteCond %{HTTP_COOKIE}:%{REQUEST_URI} ^PHPSESSID=(.*?);:(?!.*?/usuarios/\1).* [NC] 
RewriteRule ^.*?/usuarios/.+?\.(gif|jpe?g|png|wbmp)$ - [R=403,L] 

因此,當用戶有自己的文件夾上傳和轉換圖像,此規則將檢查您是否在尋找與您的id_session相匹配的圖像,如果不匹配,則會發出403響應。

它似乎工作正常,但如果任何用戶附加圖像並更改scr與其他用戶的圖像(假設他知道路徑),它正在顯示該圖像。

我該如何預防?

您可以檢查​​

+1

我寧願在應用程序代碼中看到這個邏輯,而不是web服務器。我的意思是,它的工作原理是因爲會話不需要持久化(一次性使用的站點),但我認爲在實際應用中實現它會更容易,更便於移植。 –

+0

它也被實現了,但它不能避免改變你自己的'img'標籤並訪問圖像。 – Manolo

回答

3

至於說@大衛厚德,這樣的邏輯應該在應用程序中實現,例如通過以下方式:

  1. 您的用戶上傳的圖像將被存儲在網站 網站根目錄之外,所以他們不能直接使用URL訪問,

  2. 您需要設置您的網站以處理虛擬URL (最簡單的 這裏是一個重寫規則內部傳遞請求URL作爲 參數一些PHP(或其他)腳本),

  3. 然後,在你的腳本,你將有充分的自由來檢查是否 請求匹配您的政策,

  4. 如果請求是合法的,您的腳本將能夠打開 請求的圖像文件並將其內容作爲Web服務器的答案發送。

+0

但我需要用'img'標籤來顯示圖片。如果它不在文檔根目錄下,我怎麼能這樣做? – Manolo

+0

@ManoloSalsas請閱讀#2; #3;和#4,而不僅僅是#1。 – Adi

+0

@ManoloSalsas:IMG標籤指的是一個URL,然而在這種方案中,URL是虛擬的:'/ uploads/myuser/mypict.jpg'不會直接映射到圖像,但重寫規則會將此URL作爲參數添加到'/uploads.php?url=myuser/mypict.jpg'腳本中,該腳本將能夠訪問和發送web根目錄之外的文件內容(Web服務器根目錄不適用於腳本'文件處理功能)。 – 2013-11-07 12:41:57