最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Apache配置實(shí)現(xiàn)對(duì)海量圖片資源的深度防盜鏈與防下載策略

 更新時(shí)間:2026年05月06日 09:57:09   作者:舞夢(mèng)輝影  
本文主要介紹了Apache配置實(shí)現(xiàn)對(duì)海量圖片資源的深度防盜鏈與防下載策略,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

針對(duì)海量圖片資源的防盜鏈與防下載,需要構(gòu)建多層防御體系。以下是經(jīng)過(guò)實(shí)戰(zhàn)驗(yàn)證的 Apache 深度防護(hù)策略:

一、基礎(chǔ)層:Referer 防盜鏈(第一層過(guò)濾)

<IfModule mod_rewrite.c>
    RewriteEngine On
    # 定義允許的白名單域名(正則匹配,支持子域名)
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
    RewriteCond %{HTTP_REFERER} !^https?://(www\.)?partner-site\.com [NC]
    RewriteCond %{HTTP_REFERER} !^https?://(www\.)?cdn\.yourdomain\.com [NC]
    RewriteCond %{HTTP_REFERER} !^https?://(www\.)?localhost [NC]
    # 對(duì)圖片資源應(yīng)用防盜鏈
    RewriteRule \.(jpg|jpeg|png|gif|webp|bmp|svg|ico)$ - [F,L]
</IfModule>

說(shuō)明!^$ 允許空 Referer(部分客戶端/郵件客戶端),如需嚴(yán)格可移除。[F] 返回 403 Forbidden,[L] 終止后續(xù)規(guī)則。

二、核心層:Token 簽名驗(yàn)證(防直鏈 + 防篡改)

1. 服務(wù)端 Token 生成邏輯(PHP/Python 示例)

<?php
// 密鑰必須與服務(wù)端一致
$secret = 'YourStrongSecretKey_2024!';
$expire = time() + 300; // 5分鐘有效期
function generateImageToken($path, $expire, $secret) {
    $data = $path . '|' . $expire;
    return hash_hmac('sha256', $data, $secret);
}
$imagePath = '/uploads/2024/photo.jpg';
$token = generateImageToken($imagePath, $expire, $secret);
$url = "https://img.yourdomain.com{$imagePath}?t={$token}&e={$expire}";
// 輸出: https://img.yourdomain.com/uploads/2024/photo.jpg?t=abc123&e=1715000000
?>

2. Apache 配置(驗(yàn)證 Token + 過(guò)期時(shí)間)

<IfModule mod_rewrite.c>
    RewriteEngine On
    # 僅對(duì)圖片目錄啟用
    <Directory "/var/www/images">
        # 提取 URL 參數(shù)
        RewriteCond %{QUERY_STRING} ^(?:.*&)?t=([^&]+)(?:&.*)?$ [NC]
        RewriteRule .* - [E=TOKEN:%1]
        RewriteCond %{QUERY_STRING} ^(?:.*&)?e=([^&]+)(?:&.*)?$ [NC]
        RewriteRule .* - [E=EXPIRE:%1]
        # 構(gòu)建驗(yàn)證字符串:路徑|過(guò)期時(shí)間
        RewriteRule .* - [E=VERIFY_STRING:%{REQUEST_URI}|%{ENV:EXPIRE}]
        # 計(jì)算期望的 HMAC(需要 mod_setenvif 或外部程序,這里用 Lua/外部腳本)
        # 方案A:使用 mod_lua(推薦,高性能)
        <IfModule mod_lua.c>
            LuaHookAccessChecker /etc/apache2/scripts/verify_token.lua verify_token
        </IfModule>
        # 方案B:使用外部程序驗(yàn)證(性能較低,適合低頻)
        # RewriteMap token_verify prg:/etc/apache2/scripts/verify_token.py
        # RewriteCond ${token_verify:%{ENV:VERIFY_STRING}|%{ENV:TOKEN}} !^VALID$
        # RewriteRule .* - [F,L]
        # 檢查過(guò)期時(shí)間
        RewriteCond %{TIME} > %{ENV:EXPIRE}
        RewriteRule .* - [F,L]
    </Directory>
</IfModule>

3. Lua 驗(yàn)證腳本(/etc/apache2/scripts/verify_token.lua)

-- 需要安裝 libapache2-mod-lua
require "apache2"
require "hash"
require "string"
local secret = "YourStrongSecretKey_2024!"
function verify_token(r)
    local token = r.subprocess_env["TOKEN"]
    local expire = r.subprocess_env["EXPIRE"]
    local path = r.uri
    if not token or not expire then
        return apache2.DECLINED -- 讓 Rewrite 規(guī)則處理(返回403)
    end
    -- 檢查是否過(guò)期
    local now = os.time()
    if tonumber(expire) < now then
        return apache2.HTTP_FORBIDDEN
    end
    -- 計(jì)算 HMAC
    local data = path .. "|" .. expire
    local expected = hash.hmac_sha256(data, secret)
    -- 安全比較(防時(shí)序攻擊)
    if not secure_compare(token, expected) then
        return apache2.HTTP_FORBIDDEN
    end
    return apache2.OK
end
function secure_compare(a, b)
    if #a ~= #b then return false end
    local result = 0
    for i = 1, #a do
        result = result | (string.byte(a, i) ~ string.byte(b, i))
    end
    return result == 0
end

三、傳輸層:防直接下載 + 防右鍵保存

1. 禁用圖片直接保存(Content-Disposition)

<IfModule mod_headers.c>
    # 對(duì)圖片強(qiáng)制 inline 顯示,但阻止"另存為"對(duì)話框的默認(rèn)行為
    <FilesMatch "\.(jpg|jpeg|png|gif|webp)$">
        Header set Content-Disposition "inline"
        # 禁止瀏覽器緩存圖片到本地(減少離線查看)
        Header set Cache-Control "private, no-store, max-age=0"
    </FilesMatch>
</IfModule>

2. 添加水?。ㄍㄟ^(guò) mod_pagespeed 或后端處理)

# 使用 mod_pagespeed 自動(dòng)添加水印(需安裝)
<IfModule pagespeed_module>
    ModPagespeedEnableFilters rewrite_images
    ModPagespeedEnableFilters insert_image_dimensions
    # 自定義水印濾鏡
    ModPagespeedImageMaxBytes 2097152
</IfModule>

四、行為層:反爬蟲(chóng)與異常檢測(cè)

1. 頻率限制(mod_evasive 或 mod_security)

# 使用 mod_evasive 限制單 IP 圖片請(qǐng)求頻率
<IfModule mod_evasive24.c>
    DOSHashTableSize    3097
    DOSPageCount        5          # 同一頁(yè)面5秒內(nèi)超過(guò)5次
    DOSSiteCount        50         # 同一站點(diǎn)5秒內(nèi)超過(guò)50次
    DOSPageInterval     5
    DOSSiteInterval     5
    DOSBlockingPeriod   600        # 封禁10分鐘
    DOSEmailNotify      admin@yourdomain.com
    DOSLogDir           "/var/log/mod_evasive"
</IfModule>

2. 使用 ModSecurity 高級(jí)防護(hù)

<IfModule security2_module>
    # 攔截?zé)o Referer 的批量請(qǐng)求(爬蟲(chóng)特征)
    SecRule REQUEST_FILENAME "@rx \.(jpg|jpeg|png|gif|webp)$" \
        "id:1001,phase:1,block,log,msg:'Image access without referer',\
        chain"
        SecRule REQUEST_HEADERS:Referer "@streq" \
            "setvar:ip.image_requests=+1,expirevar:ip.image_requests=60"
    # 單 IP 60秒內(nèi)超過(guò)100次圖片請(qǐng)求則封禁
    SecRule IP:IMAGE_REQUESTS "@gt 100" \
        "id:1002,phase:1,deny,status:403,msg:'Rate limit exceeded for images'"
    # 攔截常見(jiàn)爬蟲(chóng) User-Agent
    SecRule REQUEST_HEADERS:User-Agent "@pm wget curl python scrapy" \
        "id:1003,phase:1,deny,status:403,msg:'Bot detected'"
</IfModule>

五、應(yīng)用層:前端 + 后端協(xié)同防護(hù)

1. 圖片通過(guò) Canvas 渲染(防右鍵保存)

<!-- 前端示例:圖片通過(guò) Canvas 繪制,DOM 中不暴露真實(shí) img 標(biāo)簽 -->
<canvas id="protected-img" width="800" height="600"></canvas>
<script>
fetch('/api/get-image-token?path=/uploads/photo.jpg')
    .then(r => r.json())
    .then(data => {
        const img = new Image();
        img.crossOrigin = 'anonymous';
        img.onload = function() {
            const canvas = document.getElementById('protected-img');
            const ctx = canvas.getContext('2d');
            ctx.drawImage(img, 0, 0);
            // 添加視覺(jué)水印
            ctx.font = '14px Arial';
            ctx.fillStyle = 'rgba(255,255,255,0.5)';
            ctx.fillText('? YourDomain ' + new Date().getFullYear(), 10, 30);
        };
        img.src = data.url; // 帶 Token 的 URL
    });
</script>

2. 動(dòng)態(tài)縮略圖 + 防盜鏈(防止原圖泄露)

# 使用 mod_rewrite + mod_proxy 將縮略圖請(qǐng)求代理到處理服務(wù)
RewriteRule ^/thumb/(\d+)x(\d+)/(.*)$ \
    http://localhost:8080/thumbnail?w=$1&h=$2&path=$3 [P,L]

六、完整配置匯總

# ==================== 全局設(shè)置 ====================
ServerTokens Prod
ServerSignature Off
# ==================== 模塊加載 ====================
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so
LoadModule lua_module modules/mod_lua.so
# ==================== 圖片目錄防護(hù) ====================
<Directory "/var/www/images">
    Options -Indexes -FollowSymLinks
    AllowOverride None
    Require all granted
    RewriteEngine On
    # ---- Layer 1: Referer 白名單 ----
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
    RewriteCond %{HTTP_REFERER} !^https?://(www\.)?cdn\.yourdomain\.com [NC]
    RewriteCond %{HTTP_REFERER} !^https?://(www\.)?localhost [NC]
    RewriteRule \.(jpg|jpeg|png|gif|webp|bmp|svg)$ - [F,L]
    # ---- Layer 2: Token 驗(yàn)證 ----
    RewriteCond %{QUERY_STRING} ^(?:.*&)?t=([^&]+)(?:&.*)?$ [NC]
    RewriteRule .* - [E=TOKEN:%1]
    RewriteCond %{QUERY_STRING} ^(?:.*&)?e=([^&]+)(?:&.*)?$ [NC]
    RewriteRule .* - [E=EXPIRE:%1]
    # 過(guò)期檢查
    RewriteCond %{TIME} > %{ENV:EXPIRE}
    RewriteRule .* - [F,L]
    # Lua HMAC 驗(yàn)證
    <IfModule mod_lua.c>
        LuaHookAccessChecker /etc/apache2/scripts/verify_token.lua verify_token
    </IfModule>
    # ---- Layer 3: 響應(yīng)頭加固 ----
    <IfModule mod_headers.c>
        Header set Content-Disposition "inline"
        Header set Cache-Control "private, max-age=300"
        Header set X-Content-Type-Options "nosniff"
        # 禁止圖片被嵌入 iframe(點(diǎn)擊劫持防護(hù))
        Header set X-Frame-Options "DENY"
        # CSP 限制圖片加載來(lái)源
        Header set Content-Security-Policy "img-src 'self' data:; default-src 'none'"
    </IfModule>
    # ---- Layer 4: 頻率限制(需 mod_evasive)----
    <IfModule mod_evasive24.c>
        DOSPageCount        10
        DOSSiteCount        100
        DOSBlockingPeriod   300
    </IfModule>
</Directory>
# ==================== 日志記錄 ====================
CustomLog "/var/log/apache2/image_access.log" "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{UNIQUE_ID}e"

防護(hù)效果總結(jié)

層級(jí)防護(hù)手段防御目標(biāo)
Layer 1Referer 白名單阻止第三方網(wǎng)站直接引用
Layer 2Token + HMAC + 過(guò)期時(shí)間防止 URL 分享、直鏈訪問(wèn)
Layer 3響應(yīng)頭控制 + CSP防止右鍵保存、iframe 嵌入
Layer 4頻率限制 + WAF阻止爬蟲(chóng)批量抓取
Layer 5Canvas 渲染 + 動(dòng)態(tài)水印前端防保存、溯源追蹤

這套方案的核心是 Token 簽名機(jī)制——即使攻擊者獲取了圖片 URL,Token 會(huì)在短時(shí)間內(nèi)過(guò)期,且無(wú)法偽造簽名,從根本上杜絕了盜鏈和批量下載。

到此這篇關(guān)于Apache配置實(shí)現(xiàn)對(duì)海量圖片資源的深度防盜鏈與防下載策略的文章就介紹到這了,更多相關(guān)Apache海量圖片防盜鏈與防下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Apache Shiro 使用手冊(cè)(五) Shiro 配置說(shuō)明

    Apache Shiro 使用手冊(cè)(五) Shiro 配置說(shuō)明

    這篇文章主要為大家分享了Apache Shiro 配置說(shuō)明,需要的朋友可以參考下
    2014-06-06
  • 在Ubuntu上運(yùn)行Jar包的操作步驟

    在Ubuntu上運(yùn)行Jar包的操作步驟

    Jar(Java Archive)文件是一種歸檔文件格式,用于聚合多個(gè)Java類文件、相關(guān)的元數(shù)據(jù)和資源(如圖像和配置文件)到單一文件中,Jar包不僅是發(fā)布Java應(yīng)用程序的標(biāo)準(zhǔn)方式,也是庫(kù)分發(fā)的常見(jiàn)形式,本文介紹了如何在Ubuntu上運(yùn)行Jar包,需要的朋友可以參考下
    2024-06-06
  • linux下端口被占用問(wèn)題以及解除方式

    linux下端口被占用問(wèn)題以及解除方式

    這篇文章主要介紹了linux下端口被占用問(wèn)題以及解除方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • yum安裝wget命令使用方式

    yum安裝wget命令使用方式

    Wget是一個(gè)從網(wǎng)絡(luò)自動(dòng)下載文件的工具,支持HTTP、HTTPS、FTP,并可使用HTTP代理,在虛擬機(jī)中發(fā)現(xiàn)wget命令不存在,通過(guò)yum安裝wget后,系統(tǒng)自動(dòng)完成安裝并提示用戶,Yum是一個(gè)基于RPM的軟件包管理器,能夠自動(dòng)下載、安裝并處理依賴項(xiàng),支持安裝、刪除和更新軟件包,命令簡(jiǎn)潔易用
    2025-09-09
  • Ubuntu系統(tǒng)的備份和恢復(fù)實(shí)現(xiàn)方式

    Ubuntu系統(tǒng)的備份和恢復(fù)實(shí)現(xiàn)方式

    Timeshift是Linux系統(tǒng)備份與恢復(fù)工具,支持增量式備份和Btrfs快照,備份位置可選擇非系統(tǒng)硬盤或移動(dòng)U盤,用戶可以通過(guò)圖形界面或終端命令進(jìn)行操作,包括全備份和選擇性備份,恢復(fù)系統(tǒng)時(shí),可以使用LiveCD進(jìn)行操作
    2025-12-12
  • Linux搭建Mysql主從同步的教程

    Linux搭建Mysql主從同步的教程

    這篇文章主要介紹了Linux搭建Mysql主從同步的教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Linux使用Sudo委派權(quán)限

    Linux使用Sudo委派權(quán)限

    今天小編就為大家分享一篇關(guān)于Linux使用Sudo委派權(quán)限的文章,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • 如何在Linux服務(wù)器上安裝CVAT (Docker 28.5.1)

    如何在Linux服務(wù)器上安裝CVAT (Docker 28.5.1)

    本文詳細(xì)介紹了如何在Linux服務(wù)器上安裝CVAT,并確保其與Docker 28.5.1版本的兼容性,步驟包括安裝Docker、配置國(guó)內(nèi)鏡像源、安裝CVAT、啟動(dòng)服務(wù)、創(chuàng)建管理員賬戶以及驗(yàn)證安裝,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • Linux文件權(quán)限與群組修改命令詳解

    Linux文件權(quán)限與群組修改命令詳解

    這篇文章主要介紹了Linux文件權(quán)限與群組修改命令詳解,在Linux中,一切皆為文件(目錄也是文件),每個(gè)文件對(duì)用戶具有可讀(read)、可寫(write)、可執(zhí)行(execute)權(quán)限,需要的朋友可以參考下
    2019-07-07
  • linux中數(shù)據(jù)庫(kù)的定時(shí)備份

    linux中數(shù)據(jù)庫(kù)的定時(shí)備份

    這篇文章主要介紹了linux中數(shù)據(jù)庫(kù)的定時(shí)備份的相關(guān)資料,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

宁国市| 天峻县| 池州市| 乌拉特后旗| 韩城市| 疏附县| 闵行区| 茌平县| 慈利县| 霸州市| 邳州市| 大连市| 崇仁县| 永胜县| 息烽县| 乐都县| 敦化市| 浪卡子县| 灵丘县| 张北县| 历史| 同心县| 皋兰县| 宕昌县| 左云县| 安西县| 苏尼特右旗| 长沙县| 宜黄县| 昌黎县| 乌兰察布市| 馆陶县| 万山特区| 喜德县| 会同县| 昔阳县| 皋兰县| 三门县| 卓尼县| 民权县| 阿克|