2017-08-15 158 views
0

我寫了一個PHP腳本上傳一個標誌圖片。它工作正常。不允許訪問上傳目錄文件,除了瀏覽器

但我的應用程序是使用幾個人,他們都可以上傳他們的標誌。所以我創建了這個路徑: 'uploads/IDCLIENT/logo.png' 這是行得通!

但是,如果在我的瀏覽器中設置的網址爲:http://mydomain/uploads/IDCLIENT/logo.png,我可以看到它。如果我設置爲http://mydomain/uploads/ANOTHER_IDCLIENT/logo.png,我可以看到其他用戶的徽標。這是尷尬。

我有一個.htaccess文件在我的根目錄:

RewriteEngine on 

RewriteRule ^([a-zA-Z0-9\-\_\/\\?\=]*)$ index.php?p=$1 [QSA] 

所以我嘗試添加一個htaccess文件中的「上傳」目錄:

Order Deny,Allow 
Deny from all 

這工作,我可以」 t當我設置url時看到文件,但在我的應用程序中,我看不到文件,徽標無法顯示。

有沒有辦法禁止直接訪問上傳目錄(當我們設置一個網址)並顯示上傳目錄中的文件在我的HTML文件。

謝謝。

+0

你必須能夠以某種方式分離圖像。在這裏你選擇將它們與IDCLIENT分開,我沒有看到這個問題。每個客戶都有自己的域名嗎?在這種情況下,您可以通過域 – hanshenrik

+0

將它們分開,不會有它們自己的域。 id的問題在於它是增量式的,如果我有id:5,我會嘗試在url欄中輸入6,我會工作,我會看到其他用戶的標誌。 – Alexking2005

+0

感嘆,哈希數可能? – hanshenrik

回答

0

編輯:爲了擴大你的問題:

使用Deny from all(顧名思義)否認ALL請求到特定的文件/目錄你指揮的.htaccess否認。

你也拒絕你的服務器訪問文件/目錄(甚至你的localhost是127.0.0.1),所以它不能直接從文件夾中獲取圖像並顯示它。

那麼你需要做什麼?您需要允許server/localhost直接訪問該文件/目錄。

通過在現有的兩行代碼下使用allow from 127.0.0.1將IP添加爲白名單項目將允許您的本地主機直接訪問。

+0

我會試試這個。我在另一個可以上傳圖片的應用程序中看到,我在源代碼中看到了圖片的url,我複製它並嘗試導航到父目錄,並且出現404錯誤。他們是怎麼做到的? – Alexking2005

+0

NOPE!它不起作用。我在上傳目錄中創建了一個.htaccess文件:Order Deny,Allow Deny from all Allow from 127.0.0.1 而且我無法在我的html源代碼中顯示徽標。 – Alexking2005

+0

或者我可以使用rewrite_url嗎?在上傳/ IDCLIENT/logo.png存儲徽標,但顯示'img/uploads_files/my_logo.png',如果我嘗試訪問'img/uploads_files'我得到一個404錯誤?沒有? – Alexking2005

0

對此的建議是將IDCLIENT更改爲使用不同類型的密鑰。我想你可能會使用遞增整數。

一個很好的解決方案是使用UUID4。

因此,一個URL會像這樣:http://mydomain/uploads/619df8f5-24aa-4a70-aa84-dedb1e5eeea5/logo.png

這將使如果不是不可能的猜測另一客戶端的存儲文件夾變得越來越困難。 https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29

PHP包的UUID 4:UUID的4

更多信息https://github.com/ramsey/uuid

+0

謝謝,我不知道uuid4可能和它看起來一樣嚴重。我會讀到這個。但是,我需要將這個uuid存儲在數據庫中以供客戶使用。 – Alexking2005

0

我找到了解決辦法: 修改我的。在我的根目錄htaccess文件,我添加一行:

RewriteEngine on 

RewriteRule ^([a-zA-Z0-9\-\_\/\\?\=]*)$ index.php?p=$1 [QSA] 

# redirect the request views/img/shared_uploads/ TO views/img/logo 
RewriteRule ^views/img/shared_uploads/(.+)$ /views/img/logo/$1 [NC,L,R=302] 

如果我設定的網址如下:http://mydomain/views/img/shared_uploads/IDCLIENT/它不工作。

感謝您的幫助。

相關問題