欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot如何實(shí)現(xiàn)防盜鏈

 更新時(shí)間:2024年12月10日 08:47:29   作者:xiangzhihong8  
這篇文章主要為大家詳細(xì)介紹了SpringBoot是如何實(shí)現(xiàn)防盜鏈的,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、什么是盜鏈

盜鏈?zhǔn)莻€(gè)什么操作,看一下百度給出的解釋:盜鏈?zhǔn)侵阜?wù)提供商自己不提供服務(wù)的內(nèi)容,通過技術(shù)手段繞過其它有利益的最終用戶界面(如廣告),直接在自己的網(wǎng)站上向最終用戶提供其它服務(wù)提供商的服務(wù)內(nèi)容,騙取最終用戶的瀏覽和點(diǎn)擊率。受益者不提供資源或提供很少的資源,而真正的服務(wù)提供商卻得不到任何的收益。

術(shù)語聽得有點(diǎn)迷糊?那我們簡單的舉個(gè)栗子:平時(shí)我們?cè)赥X網(wǎng)看新聞,里邊有很多勁爆的圖片、視頻資源,每天吸引上億的用戶活躍瀏覽,賺著大把的廣告費(fèi)。

有一天一個(gè)窮比的程序員也想建一個(gè)自己的網(wǎng)站吸引用戶賺廣告費(fèi),但苦于自己沒有資源,他靈光一閃盯上了TX網(wǎng),心想:要是把它的資源為我所用,這樣就能借助TX的資源為自己賺錢。于是他通過爬蟲等一些列技術(shù)手段,把TX網(wǎng)資源拉取到自己的網(wǎng)站上,繞過了TX網(wǎng)的展示頁面直接呈現(xiàn)給用戶,達(dá)到了自己不提供資源又能賺錢的目的。

而如此做法卻嚴(yán)重的損害了TX網(wǎng)的利益,不僅分流了大量用戶,而且由于小富網(wǎng)的大量間接資源請(qǐng)求,大大增加TX網(wǎng)服務(wù)器及帶寬的壓力。TX網(wǎng)的網(wǎng)安部門在知曉這一事情后決定封殺這類空手套白狼的站點(diǎn),終于祭出防盜鏈系統(tǒng)。

上邊我們簡單的舉例說了什么是網(wǎng)站的盜鏈,再總結(jié)的簡單點(diǎn)就是小站點(diǎn)盜取大站點(diǎn)資源以此來獲利的一種行為。既然有人盜就會(huì)有人防盜,接下來在看看怎么防止盜鏈。

二、如何防盜鏈

防盜鏈在google,新浪,網(wǎng)易,天涯等,內(nèi)容為主的網(wǎng)站應(yīng)用的比較多,畢竟主要靠資源內(nèi)容賺錢的嘛。

提到防盜鏈的實(shí)現(xiàn)原理得從HTTP協(xié)議說起,上邊我們說過設(shè)置防盜鏈以后,會(huì)對(duì) “除了在TX網(wǎng)本站以外發(fā)起的資源請(qǐng)求全部封殺”,那么問題來了,如何識(shí)別一個(gè)請(qǐng)求URL是從哪個(gè)站點(diǎn)發(fā)出的呢?

熟悉HTTP協(xié)議的小伙伴應(yīng)該知道,在HTTP協(xié)議頭里有一個(gè)叫referer的字段,通過referer 告訴服務(wù)器該網(wǎng)頁是從哪個(gè)頁面鏈接過來的,知道這個(gè)就好辦了,只要獲取 referer 字段,一旦檢測到來源不是本站即進(jìn)行阻止或者返回指定的頁面。

防盜鏈的核心理念:盡量做到不讓外站獲取到我的資源,即便能通過一些手段獲取到資源,也讓你的獲取過程異常繁瑣復(fù)雜,無法實(shí)現(xiàn)自動(dòng)化處理,或者干脆就給你有問題的資源惡心死你。做防盜鏈的方法比較多,基于HTTP協(xié)議頭的referer屬性也只是其中一種,下邊我們來分析幾種實(shí)現(xiàn)防盜鏈的方法。

2.1 基于HTTP協(xié)議的referer

基于HTTP協(xié)議中的 referer做防盜鏈,可以從網(wǎng)關(guān)層或者利用AOP、Filter攔截器實(shí)現(xiàn)。

使用Nginx在網(wǎng)關(guān)層做防盜鏈,目前是最簡單的方式之一。通過攔截來訪問資源的請(qǐng)求,valid_referers 關(guān)鍵字定義了白名單,校驗(yàn)請(qǐng)求頭中referer地址是否為本站,如不是本站請(qǐng)求,rewrite 轉(zhuǎn)發(fā)請(qǐng)求到指定的警告頁面。在 server 或者 location 配置模塊中加入:valid_referers none blocked,其中 none : 允許沒有http_refer的請(qǐng)求訪問資源(比如:直接在瀏覽器輸入圖片網(wǎng)址);blocked : 允許不是http://開頭的,不帶協(xié)議的請(qǐng)求訪問資源。

[root@server1 nginx]# vim conf/nginx.conf
 
 
      location / {
            root /web;
             index index.html;
      }
      location ~* \.(gif|jpg|png|jpeg)$ {
            root /web;
            valid_referers none blocked www.chengxy-nds.top;
            if ($invalid_referer){
                #return 403;
                rewrite ^/ https://img-blog.csdnimg.cn/20200429152123372.png;
         }
     }
 
 
     server {
         listen 80;
         server_name www.chengxy-nds.top;
         location / {
                 root /bbs;
                 index index.html;
         }
    }
 
[root@server1 nginx]# systemctl restart nginx

這種實(shí)現(xiàn)可以限制大多數(shù)普通的非法請(qǐng)求,但不能限制有目的的請(qǐng)求,因?yàn)榭梢酝ㄟ^偽造referer信息來繞過。另一種是使用Filter攔截器方式。

public class MyFilter implements Filter {
    @Override
    public void doFilter(HttpServletRequest request, HttpServletResponse response,
            FilterChain chain) throws IOException, ServletException {
 
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        String referer = req.getHeader("referer");
 
        if (referer == null || !referer.contains(req.getServerName())) {
            req.getRequestDispatcher("XXX.jpg").forward(req, res);
        } else {
            chain.doFilter(request, response);
        }
    }
}

可以看到,F(xiàn)ilter攔截器的實(shí)現(xiàn)方式更加簡單,攔截指定請(qǐng)求URL,拿到HttpServletRequest 中 referer值比對(duì)是否為本站。

2.2 登錄驗(yàn)證,禁止游客訪問

登錄驗(yàn)證這種就屬于一刀切的方式,一般在論壇、社區(qū)類網(wǎng)站使用比較多,不管你發(fā)起請(qǐng)求的站點(diǎn)是什么,到我這先登錄,沒登錄請(qǐng)求直接拒絕,簡單又粗暴。

2.3 圖形驗(yàn)證碼

圖形驗(yàn)證碼是一種比較常規(guī)的限制辦法,比如:下載資源時(shí),必須手動(dòng)操作驗(yàn)證碼,使爬蟲工具無法繞過校驗(yàn),起到保護(hù)資源的目的。

當(dāng)然,實(shí)現(xiàn)防盜鏈的方式還有很多,這里就不一一列舉了。

到此這篇關(guān)于SpringBoot如何實(shí)現(xiàn)防盜鏈的文章就介紹到這了,更多相關(guān)SpringBoot防盜鏈內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決因缺少Log4j依賴導(dǎo)致應(yīng)用啟動(dòng)失敗的問題

    解決因缺少Log4j依賴導(dǎo)致應(yīng)用啟動(dòng)失敗的問題

    日志是應(yīng)用軟件中不可缺少的部分,Apache的開源項(xiàng)目log4j是一個(gè)功能強(qiáng)大的日志組件,提供方便的日志記錄。但這篇文章不是介紹Log4j,這篇文章主要介紹了關(guān)于因缺少Log4j依賴導(dǎo)致應(yīng)用啟動(dòng)失敗問題的相關(guān)資料,需要的朋友可以參考下。
    2017-04-04
  • Springboot如何獲取配置文件application.yml中自定義的變量并使用

    Springboot如何獲取配置文件application.yml中自定義的變量并使用

    這篇文章主要介紹了Springboot中獲取配置文件(application.yml)中自定義的變量并使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 一文詳解kafka序列化器和攔截器

    一文詳解kafka序列化器和攔截器

    這篇文章主要為大家介紹了kafka序列化器和攔截器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Spring-Web與Spring-WebFlux沖突問題解決

    Spring-Web與Spring-WebFlux沖突問題解決

    Spring WebFlux是一套全新的Reactive Web技術(shù)棧,實(shí)現(xiàn)完全非阻塞,支持Reactive Streams背壓等特性,這篇文章主要給大家介紹了關(guān)于Spring-Web與Spring-WebFlux沖突問題解決的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • java 合并排序算法、冒泡排序算法、選擇排序算法、插入排序算法、快速排序算法的描述

    java 合并排序算法、冒泡排序算法、選擇排序算法、插入排序算法、快速排序算法的描述

    算法是程序設(shè)計(jì)的精髓,程序設(shè)計(jì)的實(shí)質(zhì)就是構(gòu)造解決問題的算法,將其解釋為計(jì)算機(jī)語言。
    2009-06-06
  • Java字符拼接成字符串的注意點(diǎn)詳解

    Java字符拼接成字符串的注意點(diǎn)詳解

    這篇文章主要介紹了Java字符拼接成字符串的注意點(diǎn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Spring注解之@Value詳解

    Spring注解之@Value詳解

    這篇文章主要介紹了Spring注解之@Value詳解,@Value可以修飾屬性、方法、參數(shù)、注釋類型,編譯器會(huì)將?@Value注解的信息保留在?.class?文件中,并且能被虛擬機(jī)讀取,需要的朋友可以參考下
    2024-01-01
  • JUnit測試控制@Test執(zhí)行順序的三種方式小結(jié)

    JUnit測試控制@Test執(zhí)行順序的三種方式小結(jié)

    這篇文章主要介紹了JUnit測試控制@Test執(zhí)行順序的三種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 詳解Junit 測試之 Spring Test

    詳解Junit 測試之 Spring Test

    本篇文章主要介紹了Junit 測試之 Spring Test,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 如何基于Autowired對(duì)構(gòu)造函數(shù)進(jìn)行注釋

    如何基于Autowired對(duì)構(gòu)造函數(shù)進(jìn)行注釋

    這篇文章主要介紹了如何基于Autowired對(duì)構(gòu)造函數(shù)進(jìn)行注釋,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論