php如何防止圖片盜用/盜鏈的兩種方法

来源:http://www.cnblogs.com/myhomepages/archive/2016/10/31/6017867.html
-Advertisement-
Play Games

如今的互聯網,採集網站非常多,很多網站都喜歡盜鏈/盜用別人網站的圖片,這樣不僅侵犯網權,還導致被盜鏈的網站消耗大量的流量,給伺服器造成比較大的壓力,本文章向大家介紹php如何防止圖片盜用/盜鏈的兩種方法,需要的朋友可以參考一下。 圖片防盜鏈有什麼用? 防止其它網站盜用你的圖片,浪費你寶貴的流量。本文 ...


如今的互聯網,採集網站非常多,很多網站都喜歡盜鏈/盜用別人網站的圖片,這樣不僅侵犯網權,還導致被盜鏈的網站消耗大量的流量,給伺服器造成比較大的壓力,本文章向大家介紹php如何防止圖片盜用/盜鏈的兩種方法,需要的朋友可以參考一下。

圖片防盜鏈有什麼用? 防止其它網站盜用你的圖片,浪費你寶貴的流量。本文章向大家介紹php防止圖片盜用/盜鏈的兩種方法

  1. Apache圖片重定向方法
  2. 設置images目錄不充許http訪問

 

Apache伺服器下防止圖片盜鏈的辦法

如果你的網站以圖片為主,哪天發現月底沒到流量就快用光了,那就可以利用圖片轉向,在不修改網頁的前提下,把圖片下載請求轉向到其它空間(比如試用主機),臨時過渡。

下麵開始講解,比如你的圖片都在img目錄下,那就在該目錄下放一個名為 .htaccess 的文件,內容如下:

RewriteEngine on
 
RewriteCond %{HTTP_REFERER} !^$ [NC]
 
RewriteCond %{HTTP_REFERER} !simcole.cn [NC]
 
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
 
RewriteCond %{HTTP_REFERER} !google.com [NC]
 
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
 
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]
/* 作者:碼農教程  http://www.manongjc.com   */
RewriteRule .(jpg|gif|png|bmp|swf|jpeg) /image/replace.gif [R,NC,L]
 
RewriteRule ^(.*)$ http://image.simcole.cn/image/$1 [L]

大概解釋下:

RewriteCond %{HTTP_REFERER} !^$ [NC]
 
RewriteCond %{HTTP_REFERER} !simcole.cn [NC]
 
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
 
RewriteCond %{HTTP_REFERER} !google.com [NC]
/* 作者:碼農教程  http://www.manongjc.com/article/1550.html   */
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
 
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]

這部分是判斷是否盜鏈,如果以上條件都成立(即訪問圖片的請求,既不是直接輸入網址,也不是來自simcole.cn,也不是來自zhuaxia.com,也不是來自google.com,也不是來自baidu.com,也不是來自bloglines.com 的話),就執行下列轉向:

RewriteRule .(jpg|gif|png|bmp|swf|jpeg) /image/replace.gif [R,NC,L]

意思是讓所有盜鏈 img 目錄下 jpg、gif、png、bmp、swf、jpeg 文件的網頁,顯示的圖片都用 image 目錄下的 replace.gif 圖片替換掉。註意替換顯示的圖片不要放在設置防盜鏈的 img 目錄下。如果照上面的規則判斷出圖片請求不是盜鏈的,就執行以下轉向:

RewriteRule ^(.*)$ http://image.simcole.cn/image/$1 [L]

意思是對 img 目錄下所有的請求都轉向到目標伺服器,比如有個圖片原來的 url 是 http://www.bebecn.com/img/girl.jpg ,現在就會轉到 http://image.bebecn.com/image/girl.jpg 去。當然了你得先把原伺服器 img 目錄下的文件統統拷貝到臨時伺服器的 image 目錄下,轉向才會真正可用。起到的效果就是把原伺服器圖片下載所占用的流量統統省下,讓臨時伺服器來承受了.

 

設置images目錄不充許http訪問

把images目錄設置成不充許http訪問(把圖片目錄的:讀取、目錄瀏覽 兩個許可權去掉)。
用一個PHP文件,直接用file函數讀取這個圖片。在這個PHP文件里進行許可權控制。
apache環境中,在你的圖片目錄中加上下麵這個文件即可。

文件名 .htaccess
文件內容如下

# options the .htaccess files in directories can override.
# Edit apache/conf/httpd.conf to AllowOverride in .htaccess
# AllowOverride AuthConfig
# Stop the directory list from being shown
Options -Indexes
# Controls who can get stuff from this server.
Order Deny,Allow
Deny from all
Allow from localhost

其他web環境如iss,nginx也類似。

class imgdata{
public $imgsrc;
public $imgdata;
public $imgform;
public function getdir($source){
$this->imgsrc = $source;
}
public function img2data(){
$this->_imgfrom($this->imgsrc);
return $this->imgdata=fread(fopen($this->imgsrc,'rb'),filesize($this->imgsrc));
}
public function data2img(){
header(“content-type:$this->imgform”);
echo $this->imgdata;
//echo $this->imgform;
//imagecreatefromstring($this->imgdata);
}
public function _imgfrom($imgsrc){
$info=getimagesize($imgsrc);
//var_dump($info);
/* 作者:碼農教程  http://www.manongjc.com   */
return $this->imgform = $info['mime'];
}
}
$n = new imgdata;
$n -> getdir(“1.jpg”); //圖片路徑,一般存儲在資料庫里,用戶無法獲取真實路徑,可根據圖片ID來獲取
$n -> img2data();
$n -> data2img();

這段代碼是讀取圖片,然後直接輸出給瀏覽器,在讀取和輸出之前,進行用戶許可權判斷。
這裡說的PHP讀取圖片,不是指讀取路徑,而是指讀取圖片的內容,然後通過
Header();輸入圖片類型,比如 gif png jpg等,下麵輸出圖片的內容,所以用到了fread()
實際上,你看到 image.php?id=100 就是顯示這張圖片在瀏覽器上,而你查看源文件,看到的不會是圖片的路徑,而是亂碼似的圖片內容。

類似於qq空間的加密相冊,只有輸入密碼才能訪問,並且直接在瀏覽器輸入 加密相冊中的相片地址也是無法訪問。我目前的想法是 圖片的地址是一個php文件,通過 php 驗證許可權 ,讀取圖片,並輸出,不知道除了這樣的方法還有更簡單高效的做法沒有?比如生成臨時的瀏覽地址,使用一些 nginx 的一些防盜鏈插件?
你可以利用ngx_http_auth_basic_module來完成。

修改配置文件

location / {
root /usr/local/nginx/html;
auth_basic “Auth”;
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
index index.php index.htm;
}

auth_basic “Auth”中的Auth是彈出框(輸入用戶名和密碼)的標題
auth_basic_user_file /usr/local/nginx/conf/htpasswd; 中的/usr/local/nginx/conf/htpasswd是保存密碼的文件


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 0x00、為什麼要擴展 因為我的伺服器是小水管,載入一個完整的網站往往需要很久,想加速網站載入速度,靜態文件最好是分離出來,所有就想到了擴展UrlHelper,用來支持CDN載入文件。 0x01、論引用靜態文件的幾種方法 以 jquery-1.11.0.min.js 為例,一般常用的有以下兩種(我自 ...
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _016 { //抽象類(菜) public abstract class Food { //抽象方法,輸出 ...
  • 文檔目錄 本節內容: 簡介 AbpWebViewPage 基類 簡介 ABP通過nuget包Abp.Web.Mvc集成到Mvc視圖裡,你可以像往常那樣創建常規的視圖。 AbpWebViewPage 基類 ABP也提供了AbpWebViewPage,它定義了一些有用的屬性和方法,如果你使用啟動模板創建 ...
  • 不是本人所寫!網路收集 C 中的匿名函數和Lamda是很有意思的東東,那麼我們就來介紹一下,這到底是什麼玩意,有什麼用途了? 1. 打開visual studio 新建一個控制台程式. 2. 我們利用委托來寫一個匿名函數. 代碼如下圖. 3. 我們再來用lambda表達式寫一次一模一樣的功能. 委托 ...
  • 首先我們新建一個項目,Java項目或者是Javaweb項目都可以,然後把hibernate需要的jar導入,我用的jar包如下: 然後新建一個實體類Teacher.java並添加get和set方法: 在Hibernate中一個實體類對應一個.hbm.xml文件,因此我們新建一個Teacher.hbm ...
  • Docker Introduction to Docker Monitoring Database MongoDB: The Good, The Bad, and The Ugly Web 4 Keys to a Clean Angular Implementation Vue.js server ... ...
  • 今日問題: 請問主程式輸出結果是?(點擊以下“【Java每日一題】20161101”查看20161031問題解析) 題目原發佈於公眾號、簡書:【Java每日一題】20161101,【Java每日一題】20161101 每日一題最新將在公眾號發佈,歡迎訂閱,交流進步 ...
  • 下麵是 Java 線程相關的熱門面試題,你可以用它來好好準備面試。 1) 什麼是線程? 線程是操作系統能夠進行運算調度的最小單位,它被包含在進程之中,是進程中的實際運作單位。程式員可以通過它進行多處理器編程,你可以使用多線程對運算密集型任務提速。比如,如果一個線程完成一個任務要 100 毫秒,那麼用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...