1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        圖片防盜鏈的實現(xiàn)既然如此簡單

        共 5030字,需瀏覽 11分鐘

         ·

        2022-01-07 21:12


        點擊上方 前端陽光,關(guān)注公眾號

        回復(fù)加群,加入技術(shù)交流群交流群


        前言

        防盜鏈,就是防有人盜用你的鏈接。別人在他的網(wǎng)站上引用了你的資源(圖片,音頻),這樣就會浪費你的流量,資源被引用的多了起來,你這邊的服務(wù)器可能就扛不住掛了,你說這是多么悲哀的事情!

        一般情況下以圖片防盜鏈居多,我們也來看看圖片防盜鏈是如何做出來的。

        先來看個圖,這個圖是我在本地啟了一個服務(wù)后,分別加載了百度和360搜索兩個網(wǎng)站的圖片鏈接,對應(yīng)防盜鏈下的樣子(說好的美少女呢)

        百度的做法是用另外一張圖片替換了,而360搜索的做法更粗暴,直接出現(xiàn)了裂圖,訪問403直接給Forbidden了。

        這就是所謂的圖片防盜鏈了,畢竟看到這樣的圖,大家也沒了興致,和之前想要的圖片差距太大,也就沒必要再保留了

        那么關(guān)鍵部分來了,圖片防盜鏈?zhǔn)侨绾巫龅降哪??且看下圖

        圖中所示,在請求頭中有Host(請求的主機)和Referer(來源)兩個參數(shù),之所以會形成防盜鏈,那是因為Host和referer所對應(yīng)的值不相同造成的。

        下面我們就直接來實踐一下,做一個圖片防盜鏈,上菜;

        該圖為整個文件夾目錄結(jié)構(gòu),下面參考該目錄結(jié)構(gòu)來做,繼續(xù)來擼。

        // js部分
        const fs = require('fs');
        const path = require('path');
        const http = require('http');
        const url = require('url');
        const getHostName = function (str{
            let { hostname } = url.parse(str);
            return hostname;
        };

        http.createServer((req, res) => {
            let refer = req.headers['referer'] || req.headers['referrer'];  // 請求頭都是小寫的
            // 先看一下refer的值,去和host的值作對比,不相等就需要防盜鏈了  
            // 要讀取文件 返回給客戶端
            let { pathname } = url.parse(req.url);
            let src = path.join(__dirname, 'public''.' + pathname);
            // src代表我要找的文件
            
            fs.stat(src, err => {   // 先判斷文件存不存在
                if (!err) {
                    if (refer) {    // 不是所有圖片都有來源
                        let referHost = getHostName(refer);
                        let host = req.headers['host'].split(':')[0];
                        
                        if (referHost !== host) {
                            // 防盜鏈
                            fs.createReadStream(path.join(__dirname, 'public''./1.jpg')).pipe(res);
                        } else {
                            // 正常顯示,如果路徑存在,可以正常顯示直接返回
                            fs.createReadStream(src).pipe(res);
                        }
                    } else {
                        // 正常顯示,如果路徑存在,可以正常顯示直接返回
                        fs.createReadStream(src).pipe(res);
                    }
                } else {
                    res.end('end');
                }
            });
            
        }).listen(8888);

        通過以上不到40行的代碼就完成了圖片防盜鏈,想來也并沒有辣么麻煩,利用請求頭來做的事情還是蠻多的,先來看看防盜鏈的效果吧

        <-- html部分 -->
        <body>
            <img src="http://www.chenhd.me:8888/2.png" />
        </body>

        這里我們修改一下hosts文件,把127.0.0.1指定為兩個不同的域名訪問

        • 127.0.0.1 www.chenhd.me

        • 127.0.0.1 www.chd.me

        友情提示

        • windows系統(tǒng)修改hosts文件地址為C:\Windos\System32\drivers\etc下的hosts文件,拷貝hosts文件修改后替換即可
        • mac系統(tǒng)下較為方便通過終端直接sudo vi /etc/hosts修改即可

        由于html部分我們圖片引用的地址就是www.chenhd.me域名下的圖片,所以這種情況屬于正常訪問,直接展示2.png圖片了,就是這么酷

        當(dāng)修改域名為www.chd.me的時候,再次訪問就發(fā)現(xiàn)已經(jīng)替換為防盜鏈圖片1.jpg了,看如下效果

        以上內(nèi)容就實現(xiàn)了如何做一個圖片防盜鏈,防止別人使用你的資源,當(dāng)然不僅僅是圖片防盜鏈,音頻,視頻等也可以根據(jù)此方法實現(xiàn),之后大家也可以在工作中嘗試嘗試

        好了,今天的分享就到這里了,感謝大家收看了

        來源:https://juejin.im/post/5adc0d03518825673a2022b7 作者:chenhongdong

        技術(shù)交流群


        我組建了技術(shù)交流群,里面有很多 大佬,歡迎進來交流、學(xué)習(xí)、共建?;貜?fù)加群即可。





           “分享、點贊、在看” 支持一波??




        瀏覽 41
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            好爽好紧高h视频 | 欧美考逼视频 | 91国产一区二区 | 正在播放国产视频 | 国产操逼电影 | 波多野结衣三级在线播放 | 黄色视频美女操逼 | 国产真实伦在线视频 | 宝贝你湿了h | 欧美精品久久 |