2014-02-19 72 views
1

我正在構建一個圖像服務器來處理和交付公司圖像。我的目標是建立一個系統,可以接收圖像(從FTP或應用程序),調整大小/水印,並使其可用於社交媒體或內部使用(與漂亮的短網址)。限制訪問服務器上的圖像:php,htaccess或其他?

我有問題涉及限制訪問。每個圖像分配一個8位數的代碼。該htaccess文件旨在返回正確的圖像,因此:

mysite.com/84375635成爲mysite.com/images/84375635.png

這允許任何人訪問任何圖像。我想建立一個系統,根據存儲在數據庫或文件中的要求來限制特定的圖像。我想到了可能的解決方案:

  • 使用PHP來重寫圖片上傳時的htaccess文件。
  • 使用php來接收圖像請求,然後根據數據庫中的限制重定向。

哪個是更好的選擇(或者是有一個我不知道的嗎?)

我想系統的這一元素那樣快速,低內存越好。

+1

像這樣的職位由於缺乏特殊性而處於關閉的危險之中。 http://stackoverflow.com/help/how-to-ask –

回答

2

Definetly使用PHP來處理圖像請求,並查詢該腳本中的數據庫。

絕不會用PHP爲每個請求重寫.htaccess文件。這可能甚至不起作用,訪問規則將在執行PHP腳本之前解析,而不是之後。

如果數據庫服務器在本地主機上運行,​​那麼此腳本導致的開銷將忽略不計,包括時間和內存消耗。


如果限制完全基於被允許訪問文件的IP範圍,以及那些都沒有,那麼你也可以重寫根據圖像上載的訪問規則。
請注意,這也取決於您計劃上傳的圖像數量:如果只是少數,這不是問題 - 但在.htaccess文件中有成千上萬的規則肯定是您不應該做的事情(PHP基於圖像的服務腳本與數據庫的結合不僅更快,而且更安全)。

雖然這個解決方案只需要稍微少一些的資源,但它的可擴展性也較差(例如,當您想要添加更多的限制而不僅僅是一天的IP時)。請記住在刪除圖像時也要刪除條目。

+0

我同意,在圖像請求期間編輯htaccess文件毫無意義。那時候,我可能只是重定向。其實,我正在考慮在圖片上傳時使用php來編輯htaccess文件。這樣,每次請求圖像時系統都不需要查詢數據庫 – Hoytman

+0

在你的文章中,你寫道你通過應用程序**或**通過FTP上傳圖像。後者不會觸發任何PHP腳本執行,因此除非您想手動執行此操作(或者定期使用cron作業..),否則在您的方案中更改圖像上載的規則集不是一種選擇。此外,您可能無法將所有訪問規則直接轉移到'.htaccess'文件(取決於限制的性質,例如基於用戶)。 – Chris

+0

是的,如果通過php上傳,用戶仍然必須訪問網頁才能在此處輸入圖像信息(名稱,說明等),如果它們將圖像標記爲內部圖像,則從該圖像的所有請求大型互聯網應該會失敗。這是唯一的限制。 (注意:在應用程序中,上傳和數據輸入都是一步完成的。) – Hoytman

1

你真的不應該用PHP重寫你的htaccess文件 - 這會在某些時候炸燬你的臉。

mysite.com/84375635變成mysite.com/images/84375635。PNG

爲什麼不直接使用的DirectoryIndex選擇文件 - 設置爲每個圖像唯一的目錄,然後添加在你的配置如下:

DirectoryIndex index.html index.php index.png 

然後你就可以在你的文件只需拖放作爲'index.png',如果您稍後想要添加更復雜的訪問控制,請將該圖像重命名爲.htimg.png並放入index.php以調解對該文件的訪問。

這種方法的缺點是您需要允許PHP在與文件上傳相同的目錄樹內執行 - 這對安全性不利,因此更好的解決方案是將圖像文件重命名爲'.htimg.png'然後通過404處理程序調解訪問。

您目前允許通過FTP上傳文件 - 這會對確保一致的命名實踐(並且FTP是維護,自動化和安全的主要PITA)帶來問題。我建議開除這個。

+0

這是濫用[DirectoryIndex](http://httpd.apache.org/docs/current/mod/mod_dir.html)指令,這是爲了提供HTML輸出(不僅來自於。 HTML文件作爲源)。使用'RewriteRule'來重定向這些類型的請求是很普遍的事情,不應該被爲每個單個圖像創建目錄所取代。另外,這並不真正回答這個問題,因爲這是關於限制對特定文件的訪問 - 而不是重定向。 – Chris

+0

爲什麼它「濫用」DirectoryIndex指令?它明確地做了DirectoryIndex應該做的事情:「客戶端請求目錄時查找的資源列表」。並且重定向意味着將文件保存在web服務器可直接訪問的位置 - 這意味着無法限制訪問。 – symcbean

相關問題