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
如下圖
:
點選新聞後,控制檯輸出: