1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      Nginx如何防盜鏈

      這篇文章主要介紹“Nginx如何防盜鏈”,在日常操作中,相信很多人在Nginx如何防盜鏈問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Nginx如何防盜鏈”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

      成都創(chuàng)新互聯(lián)是一家專業(yè)提供沙河企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為沙河眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

      簡(jiǎn)單有效的防盜鏈?zhǔn)侄?/h3>

      場(chǎng)景

      如果做過個(gè)人站點(diǎn)的同學(xué),可能會(huì)遇到別人盜用自己站點(diǎn)資源鏈接的情況,這就是盜鏈。說到盜鏈就要說一個(gè) HTTP 協(xié)議的 頭部,referer 頭部。當(dāng)其他網(wǎng)站通過 URL 引用了你的頁面,用戶在瀏覽器上點(diǎn)擊 URL 時(shí),HTTP 請(qǐng)求的頭部會(huì)通過 referer 頭部將該網(wǎng)站當(dāng)前頁面的 URL 帶上,告訴服務(wù)器本次請(qǐng)求是由誰發(fā)起的。

      例如,在谷歌中搜索 Nginx 然后點(diǎn)擊鏈接:

      在打開的新頁面中查看請(qǐng)求頭會(huì)發(fā)現(xiàn),請(qǐng)求頭中包含了 referer 頭部且值是 https://www.google.com/ 。

      像谷歌這種我們是允許的,但是有一些其他的網(wǎng)站想要引用我們自己網(wǎng)站的資源時(shí),就需要做一些管控了,不然豈不是誰都可以拿到鏈接。

      目的

      這里目的其實(shí)已經(jīng)很明確了,就是要拒絕非正常的網(wǎng)站訪問我們站點(diǎn)的資源。

      思路

      • invalid_referer 變量

        • referer 提供了這個(gè)變量,可以用來配置哪些 referer 頭部合法,也就是,你允許哪些網(wǎng)站引用你的資源。

      referer 模塊

      要實(shí)現(xiàn)上面的目的,referer 模塊可得算頭一號(hào),一起看下 referer 模塊怎么用的。

      • 默認(rèn)編譯進(jìn) Nginx,通過 --without-http_referer_module 禁用

      referer 模塊有三個(gè)指令,下面看一下。

      Syntax: valid_referers none | blocked | server_names | string ...; Default: — Context: server, location  Syntax: referer_hash_bucket_size size; Default: referer_hash_bucket_size 64;  Context: server, location  Syntax: referer_hash_max_size size; Default: referer_hash_max_size 2048;  Context: server, location
      valid_referers referer_hash_bucket_size referer_hash_max_size

      這里面最重要的是 valid_referers 指令,需要重點(diǎn)來說明一下。

      valid_referers 指令

      可以同時(shí)攜帶多個(gè)參數(shù),表示多個(gè) referer 頭部都生效。

      參數(shù)值
      • none

        • 允許缺失 referer 頭部的請(qǐng)求訪問

      • block:允許 referer 頭部沒有對(duì)應(yīng)的值的請(qǐng)求訪問。例如可能經(jīng)過了反向代理或者防火墻

      • server_names:若 referer 中站點(diǎn)域名與 server_name 中本機(jī)域名某個(gè)匹配,則允許該請(qǐng)求訪問

      • string:表示域名及 URL 的字符串,對(duì)域名可在前綴或者后綴中含有 * 通配符,若 referer 頭部的值匹配字符串后,則允許訪問

      • 正則表達(dá)式:若 referer 頭部的值匹配上了正則,就允許訪問

      invalid_referer 變量
      • 允許訪問時(shí)變量值為空

      • 不允許訪問時(shí)變量值為 1

      實(shí)戰(zhàn)

      下面來看一個(gè)配置文件。

      server {     server_name referer.ziyang.com;     listen 80;      error_log logs/myerror.log debug;     root html;     location /{         valid_referers none blocked server_names                        *.ziyang.com www.ziyang.org.cn/nginx/                        ~\.google\.;         if ($invalid_referer) {                 return 403;         }         return 200 'valid\n';     } }

      那么對(duì)于這個(gè)配置文件而言,以下哪些請(qǐng)求會(huì)被拒絕呢?

      curl -H 'referer: http://www.ziyang.org.cn/ttt' referer.ziyang.com/ curl -H 'referer: http://www.ziyang.com/ttt' referer.ziyang.com/ curl -H 'referer: ' referer.ziyang.com/ curl referer.ziyang.com/ curl -H 'referer: http://www.ziyang.com' referer.ziyang.com/ curl -H 'referer: http://referer.ziyang.com' referer.ziyang.com/ curl -H 'referer: http://image.baidu.com/search/detail' referer.ziyang.com/ curl -H 'referer: http://image.google.com/search/detail' referer.ziyang.com/

      我們需要先來解析一下這個(gè)配置文件。 valid_referers 指令配置了哪些值呢?

      valid_referers none blocked server_names         *.ziyang.com www.ziyang.org.cn/nginx/         ~\.google\.;
      • none:表示沒有 referer 的可以訪問

      • blocked:表示 referer 沒有值的可以訪問

      • server_names:表示本機(jī) server_name 也就是 referer.ziyang.com 可以訪問

      • *.ziyang.com:匹配上了正則的可以訪問

      • www.ziyang.org.cn/nginx/:該頁面發(fā)起的請(qǐng)求可以訪問

      • ~\.google\.:google 前后都是正則匹配

      下面就實(shí)際看下響應(yīng):

      # 返回 403,沒有匹配到任何規(guī)則 ?  ~ curl -H 'referer: http://www.ziyang.org.cn/ttt' referer.ziyang.com/  403 Forbidden  

      403 Forbidden

       
      nginx/1.17.8
         ?  ~ curl -H 'referer: http://image.baidu.com/search/detail' referer.ziyang.com/  403 Forbidden  

      403 Forbidden

       
      nginx/1.17.8
         # 匹配到了 *.ziyang.com ?  ~ curl -H 'referer: http://www.ziyang.com/ttt' referer.ziyang.com/ valid ?  ~ curl -H 'referer: http://www.ziyang.com' referer.ziyang.com/ valid # 匹配到了 server name ?  ~ curl -H 'referer: http://referer.ziyang.com' referer.ziyang.com/ valid # 匹配到了 blocked ?  ~ curl -H 'referer: ' referer.ziyang.com/ valid # 匹配到了 none ?  ~ curl referer.ziyang.com/ valid # 匹配到了 ~\.google\. ?  ~ curl -H 'referer: http://image.google.com/search/detail' referer.ziyang.com/ valid

      防盜鏈另外一種解決方案:secure_link 模塊

      referer 模塊是一種簡(jiǎn)單的防盜鏈?zhǔn)侄危仨氁蕾嚍g覽器發(fā)起請(qǐng)求才會(huì)有效,如果攻擊者偽造 referer 頭部的話,這種方式就失效了。

      secure_link 模塊是另外一種解決的方案。

      它的主要原理是,通過驗(yàn)證 URL 中哈希值的方式防盜鏈。

      基本過程是這個(gè)樣子的:

      • 由服務(wù)器(可以是 Nginx,也可以是其他 Web 服務(wù)器)生成加密的安全鏈接 URL,返回給客戶端

      • 客戶端使用安全 URL 訪問 Nginx,由 Nginx 的 secure_link 變量驗(yàn)證是否通過

      原理如下:

      • 哈希算法是不可逆的

      • 客戶端只能拿到執(zhí)行過哈希算法的 URL

      • 僅生成 URL 的服務(wù)器,驗(yàn)證 URL 是否安全的 Nginx,這兩者才保存原始的字符串

      • 原始字符串通常由以下部分有序組成:

        • 資源位置。如 HTTP 中指定資源的 URI,防止攻擊者拿到一個(gè)安全 URI 后可以訪問任意資源

        • 用戶信息。如用戶的 IP 地址,限制其他用戶盜用 URL

        • 時(shí)間戳。使安全 URL 及時(shí)過期

        • 密鑰。僅服務(wù)器端擁有,增加攻擊者猜測(cè)出原始字符串的難度

      模塊:

      • ngx_http_secure_link_module

        • 未編譯進(jìn) Nginx,需要通過 --with-http_secure_link_module 添加

      • 變量

        • secure_link

        • secure_link_expires

      Syntax: secure_link expression; Default: — Context: http, server, location  Syntax: secure_link_md5 expression; Default: — Context: http, server, location  Syntax: secure_link_secret word; Default: — Context: location

      變量值及帶過期時(shí)間的配置示例

      • secure_link

        • 值為空字符串:驗(yàn)證不通過

        • 值為 0:URL 過期

        • 值為 1:驗(yàn)證通過

      • secure_link_expires

        • 時(shí)間戳的值

      命令行生成安全鏈接
      • 生成 md5

      echo -n '時(shí)間戳URL客戶端IP密鑰' | openssl md5 -binary | openssl base64 | tr +/ - | tr -d =
      • 構(gòu)造請(qǐng)求 URL

      /test1.txt?md5=md5生成值&expires=時(shí)間戳(如 2147483647)
      Nginx 配置
      • secure_link $arg_md5,$arg_expires;

        • secure_link 后面必須跟兩個(gè)值,一個(gè)是參數(shù)中的 md5,一個(gè)是時(shí)間戳

      • secure_link_md5 \"&dollar;secure_link_expires$uri$remote_addr secret";

        • 按照什么樣的順序構(gòu)造原始字符串

      實(shí)戰(zhàn)

      下面是一個(gè)實(shí)際的配置文件,我這里就不做演示了,感興趣的可以自己做下實(shí)驗(yàn)。

      server {     server_name securelink.ziyang.com;     listen 80;     error_log  logs/myerror.log  info;     default_type text/plain;     location /{         secure_link $arg_md5,$arg_expires;         secure_link_md5 "$secure_link_expires$uri$remote_addr secret";          if ($secure_link = "") {             return 403;         }          if ($secure_link = "0") {             return 410;         }          return 200 '$secure_link:$secure_link_expires\n';     }      location /p/ {         secure_link_secret mysecret2;          if ($secure_link = "") {             return 403;         }          rewrite ^ /secure/$secure_link;     }      location /secure/ {         alias html/;         internal;     } }

      僅對(duì) URI 進(jìn)行哈希的簡(jiǎn)單辦法

      除了上面這種相對(duì)復(fù)雜的方式防盜鏈,還有一種相對(duì)簡(jiǎn)單的防盜鏈方式,就是只對(duì) URI 進(jìn)行哈希,這樣當(dāng) URI 傳

      secure_link_secret secret;
      命令行生成安全鏈接
      • 原請(qǐng)求

        • link

      • 生成的安全請(qǐng)求

        • /prefix/md5/link

      • 生成 md5

        • echo -n 'linksecret' | openssl md5 –hex

      Nginx 配置
      • secure_link_secret secret;

      這個(gè)防盜鏈的方法比較簡(jiǎn)單,那么具體是怎么用呢?大家都在網(wǎng)上下載過資源對(duì)吧,不管是電子書還是軟件,很多網(wǎng)站你點(diǎn)擊下載的時(shí)候往往會(huì)彈出另外一個(gè)頁面去下載,這個(gè)新的頁面其實(shí)就是請(qǐng)求的 Nginx 生成的安全 URL。如果這個(gè) URL 被拿到的話,其實(shí)還是可以用的,所以需要經(jīng)常的更新密鑰來確保 URL 不會(huì)被盜用。

      到此,關(guān)于“Nginx如何防盜鏈”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!


      分享題目:Nginx如何防盜鏈
      標(biāo)題來源:http://www.ef60e0e.cn/article/iphscp.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        清远市| 萝北县| 衡水市| 富民县| 资中县| 大理市| 左贡县| 常宁市| 潜江市| 手游| 临颍县| 肃宁县| 富源县| 枣强县| 武邑县| 苏州市| 修文县| 蓬安县| 宁阳县| 成武县| 嵊州市| 临澧县| 景德镇市| 东乡县| 阳春市| 濉溪县| 鄢陵县| 敦煌市| 区。| 陆良县| 兰西县| 长春市| 白朗县| 丰台区| 凤城市| 林芝县| 库尔勒市| 德化县| 柘城县| 万山特区| 嘉义县|