1. 程式人生 > >web頁面防盜鏈功能使用--request.getHeader("Referer")

web頁面防盜鏈功能使用--request.getHeader("Referer")

寫JavaEE複習回顧,看到這樣一篇文章,就轉載了。

原文地址:

web頁面防盜鏈功能使用--request.getHeader("Referer")

https://blog.csdn.net/xh16319/article/details/8459550

 

1. 防盜鏈定義:所謂防盜鏈是指防止其他web站點頁面通過連線本站點的頁面來訪問本站點內容,這樣對於本站點來說侵犯了本站點的版權

2.非法使用者: 常訪問本站點頁面的連結有三種出處:

   (1) 位址列輸入連結地址。如位址列上輸入www.csdn.com/news_100.jsp;

   (2)其他站點上的應用程式的頁面上通過連結本站點頁面資源。如(www.123.com/content.jsp頁面上有一連結指向www.csdn.net/news_100.jsp);

   (3)本站點上的頁面資源連線到本站點的另外的頁面資源。如(www.csdn.com/mulu.jsp頁面上有一連結指向www.csdn.com/news_100.jsp);

這三類使用者中第一類和第二類通常是非法使用者,如果控制這些使用者不能訪問本站點頁面資源

 3.如何防盜鏈:通過呼叫request.getHeader("Referer");判斷訪問本頁面的連結來自哪裡。具體做法:

 

  package edu.request;
     
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public class RefererServlet extends HttpServlet {
     
         //防盜鏈
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            //referer為客戶端帶來的請求頭       
            String referer = request.getHeader("Referer");
            System.out.println(referer);
            //如果連結出自位址列的輸入,則跳轉至本站點RequestAndResponse應用的首頁
            if (referer==null) {
                System.out.println("由於您訪問的內容版權所有,您是位址列上輸入的連結,即將跳轉至本站首頁...");
                response.sendRedirect("/RequestAndResponse/index.jsp");
                return ;
            }
            //如果連結出自本站點的RequestAndResponse應用的頁面,則正常顯示,如果是出自其他站點或本站點的其他應用,則跳轉至本站點RequestAndResponse應用的首頁
            if(!referer.startsWith("http://localhost:8080/RequestAndResponse")){
                System.out.println("由於您訪問的內容版權所有,您是其他網站頁面的連結,即將跳轉至本站首頁...");
                response.sendRedirect("/RequestAndResponse/index.jsp");
                return ;
            }else {
                System.out.println("來自本站頁面的連結,合法使用者");
                request.getRequestDispatcher("content.jsp").forward(request, response);
            }
            
            
        }
     
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
             doGet(request, response);
        }
     
    }

比如:通過http://localhost:8080/ServletDetail/index.jsp頁面的一個連結,連結至http://localhost:8080/RequestAndResponse/referer,則request中封裝這Referer請求頭,其內容為http://localhost:8080/ServletDetail/index.jsp

如下圖

:

點選新聞後,控制檯輸出: