img防盜技術是網站開發過程中必須考慮的一個重要問題。如果不加以處理,就有惡意用戶利用某些工具來盜用我們網站上的圖片,并且在其他網站上進行二次利用,這不僅侵犯了我們的版權,也消耗了我們的帶寬資源。php技術可以幫助我們解決這個問題。
在防盜技術中,一個簡單的方法就是利用referer字段的值進行判斷。referer指向當前請求所在的頁面,如果referer位于我們網站之外,則可以判定為惡意盜圖。如下是一個簡單的PHP代碼段,用來檢查referer。
if(empty($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], 'yourdomain.com') === false) { header('Location: default.jpg'); //重定向到一個默認圖片 exit; }上面代碼中,首先判斷referer是否存在或是否為空,如果是的話就判斷它是否包含我們自己的域名,如果包含,則能判斷這個請求是在我們網站內部進行的,返回原圖。如果不包含,則重定向到一個默認圖片。 該技術的短處是存在HTTP REFERER偽造技術。惡意用戶可以通過瀏覽器插件或網關等方式來修改referer的值,從而繞過referer校驗。另外,某些瀏覽器默認是關閉referer傳遞的(Firefox瀏覽器),這個情況會造成誤判,將正常用戶也禁用掉。 針對前面提到的問題,我們可以結合加鹽(salt)技術來增強安全保障。加鹽技術通過在圖片URL中增加一些參數來混淆,使盜圖者無法直接使用原始URL。
$file_path = 'images/photo.jpg'; $salt = 'your_salt'; //加鹽值 $expire_time = time() + 7200; //有時間限制 //創建token $token = md5($file_path . $expire_time . $salt); //生成圖片URL $image_url = 'http://yourdomain.com/image.php?file_path=' . $file_path . '&expire_time=' . $expire_time . '&token=' . $token;上面代碼中,我們將原文件路徑和有效期時間拼接為一個字符串,然后通過md5加密得到了一個token值。這個token值就可以作為URL的參數,鏈接到一個php程序中進行判斷。如下所示:
$expire_time) { header('HTTP/1.1 404 Not Found'); exit; } //輸出圖片 header('Content-Type: image/jpeg'); readfile($file_path); ?>上面代碼中,我們根據傳入的參數$file_path判斷請求的是哪個文件,并讀取輸出;然后校驗token值是否有效,如果token校驗失敗或過期則返回404錯誤。 這個方法的優點是使用md5加密加鹽后得到的token值就算被暴力破解也是非常耗時間的。由于每個文件具有唯一的加鹽值,即使將URL在其他網站上使用也是無法成功的。 總之,防盜技術是一項大工程,我們需要綜合考慮多方面的情況,如安全性、效率、易用性等。只有這樣,我們才能夠更好的保障對網站圖片的保護,讓惡意盜用得到嚴厲打擊。