做一個網站,上傳圖片到伺服器某個位置,然後透過連結可以直接存取這個圖片,就是說別人拿到這個連結就可以直接在瀏覽器輸入絕對路徑看到。怎麼樣可以防止呢?
某草草2017-05-16 13:10:02
改造圖片伺服器,圖片資料夾不直接對外暴露。 在圖片伺服器上架設一個Http代理服務,訪問圖片的url中必須有一個合法的token參數才允許訪問,例如 http://www.imgserver.com/test.jpg?t=xT5112XabseFg0
,
其中t參數時你自己設定的加密演算法產生的,裡面含有這個參數的創建時間。
伺服器接收到這個請求後,解密token,拿到裡面的時間戳,如果是10秒之內創建的(你可以設定你自己希望的有效期),就返回圖片訊息,否則拒絕訪問。
這樣一個圖片連結就有了有效期限概念,自己使用時載入有合法t參數的圖片就能正常展示給使用者。用戶此時自己拷貝這個圖片地址在瀏覽器直接訪問,很可能已經過了有效期,自然打不開了。
此外,還有更簡單的方法防盜鏈:(當然也可以和上面的方法結合用)
判斷http請求發過來的referer信息,如果不等於你自己的網站域名或者為空(即,該圖片請求不是在你的網站發起的),那麼不允許訪問。
我想大声告诉你2017-05-16 13:10:02
了解thinkphp5
吧,他為什麼要把入口檔案放到public目錄下呢?
因為這樣可以保證你專案中的資源,例如圖片,不能直接被瀏覽器訪問到,只能透過單一的入口文件 index.php 訪問,這樣你的圖片或某些程式碼檔案就不能被直接存取到了!
你可以參考這個思路,設定存取權限,只能透過入口文件存取到圖片資源
为情所困2017-05-16 13:10:02
圖片上傳就是給人看的。估計你是想防盜連吧。開啟防盜連,通常判斷referer就能實一, 並選擇禁止空的referer就可以了。當然,要完全防人家盜。可以用不公開真實地址,或加上token等方法。
phpcn_u15822017-05-16 13:10:02
如果你用的http伺服器是apache,那麼在圖片目錄下新建 .htaccess 寫入以下程式碼:
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !abc.com [NC]
RewriteRule .*\.(jpg|png)$ http://localhost/ [R,NC,L]
</ifmodule>
原理是利用 apache 的 rewrite 功能,判斷 referer 是否是來自 abc.com,如果不是就跳到 localhost。
如果圖片是直接訪問是沒有 referer 的,如果是從其他網站引用則 referer 是其他網站的域名,都不允許訪問,可以達到保護圖片和節省流量的效果。