做一個網站,上傳圖片到伺服器某個位置,然後透過連結可以直接存取這個圖片,就是說別人拿到這個連結就可以直接在瀏覽器輸入絕對路徑看到。怎麼樣可以防止呢?
人生最曼妙的风景,竟是内心的淡定与从容!
樓主可以試試下又拍雲的雲端存儲,有Token防盜鏈解決你說的問題。提供文章方便你了解Token防盜鏈。
文章推薦:Token 防盜鏈詳解
改造圖片伺服器,圖片資料夾不直接對外暴露。 在圖片伺服器上架設一個Http代理服務,訪問圖片的url中必須有一個合法的token參數才允許訪問,例如 http://www.imgserver.com/test.jpg?t=xT5112XabseFg0,
http://www.imgserver.com/test.jpg?t=xT5112XabseFg0
其中t參數時你自己設定的加密演算法產生的,裡面含有這個參數的創建時間。
伺服器接收到這個請求後,解密token,拿到裡面的時間戳,如果是10秒之內創建的(你可以設定你自己希望的有效期),就返回圖片訊息,否則拒絕訪問。
這樣一個圖片連結就有了有效期限概念,自己使用時載入有合法t參數的圖片就能正常展示給使用者。用戶此時自己拷貝這個圖片地址在瀏覽器直接訪問,很可能已經過了有效期,自然打不開了。
此外,還有更簡單的方法防盜鏈:(當然也可以和上面的方法結合用)
判斷http請求發過來的referer信息,如果不等於你自己的網站域名或者為空(即,該圖片請求不是在你的網站發起的),那麼不允許訪問。
1.最愚蠢的方法就是對圖片檔案名稱進行加密,當係也防止不了link被盜用2.使用base64方式載入圖片3.在中間器設定方式伺服器以外存取
搜一下圖片防盜鏈吧,這方面要說的太多了。
這種需求還是用圖片防盜鏈技術解決比較好。
可以試試雲端平台的物件儲存功能,阿里雲和七牛都有,上傳和下載的權限是分開的,或者也有相對傳統的防盜鏈這樣的功能可以用。
了解thinkphp5吧,他為什麼要把入口檔案放到public目錄下呢?
thinkphp5
因為這樣可以保證你專案中的資源,例如圖片,不能直接被瀏覽器訪問到,只能透過單一的入口文件 index.php 訪問,這樣你的圖片或某些程式碼檔案就不能被直接存取到了!
你可以參考這個思路,設定存取權限,只能透過入口文件存取到圖片資源
圖片上傳就是給人看的。估計你是想防盜連吧。開啟防盜連,通常判斷referer就能實一, 並選擇禁止空的referer就可以了。當然,要完全防人家盜。可以用不公開真實地址,或加上token等方法。
如果你用的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 是其他網站的域名,都不允許訪問,可以達到保護圖片和節省流量的效果。
我只想說,要不放到伺服器去!只要放上去,就能看!什麼鬼防盜鏈,防菜鳥還好!
樓主可以試試下又拍雲的雲端存儲,有Token防盜鏈解決你說的問題。提供文章方便你了解Token防盜鏈。
文章推薦:Token 防盜鏈詳解
改造圖片伺服器,圖片資料夾不直接對外暴露。 在圖片伺服器上架設一個Http代理服務,訪問圖片的url中必須有一個合法的token參數才允許訪問,例如
http://www.imgserver.com/test.jpg?t=xT5112XabseFg0
,其中t參數時你自己設定的加密演算法產生的,裡面含有這個參數的創建時間。
伺服器接收到這個請求後,解密token,拿到裡面的時間戳,如果是10秒之內創建的(你可以設定你自己希望的有效期),就返回圖片訊息,否則拒絕訪問。
這樣一個圖片連結就有了有效期限概念,自己使用時載入有合法t參數的圖片就能正常展示給使用者。用戶此時自己拷貝這個圖片地址在瀏覽器直接訪問,很可能已經過了有效期,自然打不開了。
此外,還有更簡單的方法防盜鏈:(當然也可以和上面的方法結合用)
1.最愚蠢的方法就是對圖片檔案名稱進行加密,當係也防止不了link被盜用
2.使用base64方式載入圖片
3.在中間器設定方式伺服器以外存取
搜一下圖片防盜鏈吧,這方面要說的太多了。
這種需求還是用圖片防盜鏈技術解決比較好。
可以試試雲端平台的物件儲存功能,阿里雲和七牛都有,上傳和下載的權限是分開的,或者也有相對傳統的防盜鏈這樣的功能可以用。
了解
thinkphp5
吧,他為什麼要把入口檔案放到public目錄下呢?因為這樣可以保證你專案中的資源,例如圖片,不能直接被瀏覽器訪問到,只能透過單一的入口文件 index.php 訪問,這樣你的圖片或某些程式碼檔案就不能被直接存取到了!
你可以參考這個思路,設定存取權限,只能透過入口文件存取到圖片資源
圖片上傳就是給人看的。估計你是想防盜連吧。開啟防盜連,通常判斷referer就能實一, 並選擇禁止空的referer就可以了。當然,要完全防人家盜。可以用不公開真實地址,或加上token等方法。
如果你用的http伺服器是apache,那麼在圖片目錄下新建 .htaccess 寫入以下程式碼:
原理是利用 apache 的 rewrite 功能,判斷 referer 是否是來自 abc.com,如果不是就跳到 localhost。
如果圖片是直接訪問是沒有 referer 的,如果是從其他網站引用則 referer 是其他網站的域名,都不允許訪問,可以達到保護圖片和節省流量的效果。
我只想說,要不放到伺服器去!只要放上去,就能看!什麼鬼防盜鏈,防菜鳥還好!