日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

1.前言

在這個流量為王的時代,掌握了流量密碼,就相當于掌握了一切皆有可能的機遇,但是,越是流量為王,越該保持敬畏之心。

資源在獲得流量的過程中扮演著極其重要的角色,如果我們的資源沒有適當的保護機制,就會造成很大的損失。為了保護資源,我們可以添加防盜鏈機制。

Nginx對實現靜態資源防盜鏈機制提供了很好的支持,接下來我們進入實戰階段。主要分為以下兩種方式:

  • Referer信息校驗
  • secure_link資源保護

2.Referer信息校驗

在Nginx靜態資源防盜鏈一文中,已經詳細介紹過實現方法,我們這里簡單回顧一下。

2.1 實現原理

當瀏覽器向web服務器發起資源請求時,會在請求頭中帶上Referer字段,告訴服務器請求是從哪個頁面過來的,服務器根據該信息進行校驗并響應。

Nginx為我們提供了ngx_http_referer_module模塊,可以獲取請求頭中Referer字段,根據字段值返回不同的響應,就可以達到如果不是從我們自己網站發起的請求,就直接返回403禁止訪問。

2.2 配置指令

作用域:server, location

語法:valid_referers none | blocked | server_names | string ...;

1)valid_referers none;

表示請求頭中不存在Referer字段。

2)valid_referers blocked;

表示請求頭中存在Referer字段,且其值不以http://或https://開頭。

3)valid_referers server_names;

表示請求頭中存在Referer字段,且其值包含nginx配置文件中server_name的其中一個。

4)任意字符串

表示請求頭中存在Referer字段,且定義了服務器名稱和可選的URI前綴。服務器名稱的開頭或結尾可以有一個“*”。在檢查過程中,“Referer”字段中的服務器端口被忽略。例如*.example.com example.*
www.example.org/galleries/

5)正則表達式

表示請求頭中存在Referer字段,且第一個符號應該是“~”(Nginx解析正則表達式規范)。需要注意的是,表達式將從http://或https://之后開始的文本相匹配。

6)配置示例

 valid_referers none blocked server_names *.example.com test.example.* ~.example.com

2.3 實戰

除了使用valid_referers指令外,我們還需要用到一個內置變量$invalid_referer,如果Referer請求標頭字段值被認為有效,則$invalid_referer的值為空字符串,否則為“1”。

 # 如果獲取圖片時,不是從www.example.com頁面發起的請求,則禁止訪問。
 location ~^/.*.(png|jpg|gif|jfif) {
     valid_referers www.example.com;
     if ($invalid_referer){
         return 403;
     }
     root   html;
 }

Tips:請求頭的Referer字段信息是可以通過程序偽裝生成的,因此根據Referer信息來實現防盜鏈并非100%可靠,但是,它能夠限制大部分的盜鏈。

3.secure_link資源保護

前面我們提到,在使用Referer信息進行校驗的時候,該字段信息可以通過程序偽裝生成,并非100%可靠。

Nginx提供了
ngx_http_secure_link_module模塊,可以對請求的鏈接進行真偽校驗,并限制鏈接的有效時間。

官方文檔:
https://nginx.org/en/docs/http/ngx_http_secure_link_module.html

話不多少,開整。

Tips:該模塊默認不構建,構建時需要自行添加configure參數
--with-http_secure_link_module。

構建過程,可參照Nginx基本命令&不停機版本升級一文進行模塊添加。

2.1 實現原理

資源鏈接按照約定的規則生成,Nginx服務器對鏈接進行真偽以及過期時間校驗。

2.2 配置指令


ngx_http_secure_link_module模塊為我們提供了兩種校驗模式:

  • 通過secure_link_secret指令,檢查鏈接的真實性。
  • 通過secure_link與secure_link_md5指令,檢查鏈接的真實性,并限制鏈接的有效時間。

接下來看看具體配置語法吧。

2.2.1 secure_link_secret

secure_link_secret指令用于指定需要通過MD5算法加密的字符串,同時需要配合$secure_link內置變量來對鏈接進行校驗。

作用域:location

語法:secure_link_secret word;

word:需要進行MD5加密的字符串,例如your_secure_word。

URI格式:/prefix/hash/link,例如
/img/6b105c468b2a59681b799a7f532505e3/aa.jpg。

  • prefix:為不包含/的任意字符串,這里為img。
  • link:這里為aa.jpg。
  • hash:這里為link與word拼接之后的值(aa.jpgyour_secure_word)進行MD5加密后的結果。

$secure_link:內置變量,如果鏈接通過了真實性檢查,則其值設置為從/prefix/hash/link中提取link的值(包含前面的/),否則將其設置為空字符串。

2.2.2 secure_link

secure_link指令定義需要從URI中取出的參數,包含MD5值和鏈接的有效時間。需要與secure_link_md 指令配合使用。

作用域:http, server, location

語法:secure_link expression;

配置示例:

http://192.168.110.101/img2/test.jfif?signature=vQ5_wrXQ_oxh5c3L9bbf8g&expires=1685003128

 # $arg_signature,$arg_expires意味著從URI中取出參數名為signature和expires的值
 secure_link $arg_signature,$arg_expires;

2.2.3 secure_link_md5

secure_link_md5指令定義一個表達式,計算表達式的MD5值,與URI傳遞的MD5值進行比較。需要配合secure_link指令和$secure_link_expires內置變量一起使用。

Tips:URI中MD5值以base64編碼的形式傳遞。

作用域:http, server, location

語法:secure_link_md5 expression;

配置示例:

 secure_link $arg_signature,$arg_expires;
 secure_link_md5 "$secure_link_expires$uri secret";

$secure_link_expires用于獲取secure_link中傳遞的expires的值。

secure_link與secure_link_md5指令的校驗步驟如下:

  • 如果secure_link指令從URI參數中提取的signature值與secure_link_md5指令計算出的MD5值不匹配,則將$secure_link設置為空字符串;
  • 如果匹配,就校驗鏈接的有效期,如果已過期則將$secure_link設置為"0",否則設置為"1"。

URI中的signature值可以通過以下方式獲取:

1)Ubuntu命令行執行

 echo -n '1685003128/img2/test.jfif secret' | 
     openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =

2)JAVA代碼

引入Apache的commons-codec包

 <dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
 </dependency>
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.codec.digest.DigestUtils;
 
 public class MD5 {
     public static void mAIn(String[] args) {
         Base64.encodeBase64URLSafeString(DigestUtils.md5("1685003128/img2/test.jfif secret"));
     }
 }

2.3 實戰

2.3.1 secure_link_secret校驗模式

配置示例:

Nginx代理服務器:192.168.110.101

 server {
         listen       80;
         server_name  localhost;
 
         location /img {
             default_type text/html;
             secure_link_secret test;
             if ($secure_link = ""){
                 return 403 "<p>You don't have permission to access the URL on this server.</p>";
             }
             rewrite ^ /secure$secure_link;
         }
 
         location /secure {
             proxy_pass http://192.168.110.100/img/;
         }
 }

服務端:192.168.110.100

location /img {
	default_type image/jpeg;
	root   /home/stone;
}

1)訪問
http://192.168.110.101/img/test.jfif,不滿足鏈接規則,403禁止訪問。

 

2)訪問
http://192.168.110.101/img/f5b20551b8d06384734de574dd7930ce/test.jfif,滿足鏈接規則。

 

2.3.2 secure_link+secure_link_md5

配置示例:

Nginx代理服務器:192.168.110.101

location /img2 {
	default_type text/html;
	secure_link $arg_signature,$arg_expires;
	secure_link_md5 "$secure_link_expires$uri secret";

	if ($secure_link = ""){
		return 403 "<h1>Forbidden</h1><p>You don't have permission to access the URL on this server.</p>";
	}

	if ($secure_link = "0"){
		return 403 "<h1>Expired</h1><p>You don't have permission to access the URL on this server.</p>";
	}

	proxy_pass http://192.168.110.100/img/;
}

服務端:192.168.110.100

location /img {
	default_type image/jpeg;
	root   /home/stone;
}

1)訪問
http://192.168.110.101/img/test.jfif,不滿足鏈接規則,403禁止訪問。

 

2)訪問
http://192.168.110.101/img2/test.jfif?signature=vQ5_wrXQ_oxh5c3L9bbf8g&expires=1685003128,滿足鏈接規則,且鏈接未過期。

3)訪問
http://192.168.110.101/img2/test.jfif?signature=JY7G1brnFeEWcNShV74eNA&expires=1684398328,滿足鏈接規則,但鏈接已過期。

 

以上就是Nginx實現靜態資源防盜鏈機制的全部內容,Nginx是多模塊化的,還有很多高級功能,我們后面繼續探索。

分享到:
標簽:Nginx
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定