2012-12-09 77 views
2

您好網站開發大師安全高效地存儲/提供網站圖片

安全存儲和提供圖片而不損害性能的最佳做法是什麼?

是否有可能將用戶圖像存儲在一個不可通過網絡訪問的文件夾中(可能更高和更早/ www?),並在用戶登錄頁面後按需提供?有一個用戶名和密碼訪問機制已經到位。

用戶不希望這些圖像可公開訪問。

我在Ubuntu上用php運行nginx。數據庫是mysql。

謝謝!

+0

儘量避免在每個請求上使用慢腳本進行身份驗證。 http://www.vitki.net/book/page/pubcookie-module-nginx這將是非常有效的。 – goat

回答

1

你可以使用一個php文件來提供這些圖像,並在服務之前做一些檢查。我會嘗試這樣的事:

<?php 
if (/* YOUR CHECK HERE */) { 
    header('Content-Type: image/jpeg'); // Or whatever your content type might be 
    readfile('/path/to/file'); 
} 

,你可以使用重寫規則的,使你的PHP文件的調用看起來像真正的圖片:

rewrite /img/users/pictures/(.*) /your_php_file.php?path=$1 break; 

或類似的東西。

這可能是安全的,但效率不高,因爲您的服務器必須訪問兩個文件。 php文件和圖像文件

+2

您可以使用'readfile'而不是'file_get_contents'然後使用'echo'。 – LSerni

+0

謝謝您更新和+1 –

+0

我認爲您的意思是重寫規則,什麼是'break'對於? –

0

執行此類操作的最有效方法可能是通過Apache重寫。用戶登錄時,將條目添加到鍵入用戶會話標識的重寫映射中。入口點的值指向保存圖像的目錄。您需要一個重寫規則,從cookie中解析會話標識並將URL重寫爲圖像目錄。實際上,您只能對該用戶進行目錄訪問。

任何涉及Apache重寫的東西都是巫術。除非你真的有這種流量,否則不值得複雜。通過PHP提供文件效率不高,但在很多情況下效率是可以忍受的。

0

這取決於你有什麼其他的要求。您可能希望讓用戶通過發送鏈接來分享他們的圖像,以便只有擁有此鏈接的用戶才能看到圖像,即使系統中未經過身份驗證。你提出的實施將會使這變得困難。

如果您不太關心可能的「泄漏」,您可以爲圖像生成隨機名稱,並將所有努力都放在這個真正的隨機性中,這樣就很難猜測圖像名稱。將猜測密碼。一方面,您可以考慮使用「密碼保護」,但請記住,您的路徑將緩存在代理,瀏覽器歷史記錄等中......因此,根據您所保護的資源,這可能不是您的解決方案。