網站防止惡意登錄或防盜鏈的使用

  • 使用場景:明明引用了一個正確的圖片地址,但顯示出來的倒是一個紅叉或寫有「此圖片僅限於網站用戶交流溝通使用」之類的「假圖片」。用嗅探軟件找到了多媒體資源的真實地址用下載軟件仍然不能下載。下載一些資源時老是出錯,若是確認地址沒錯的話,大多數狀況都是趕上防盜鏈系統了。常見的防盜鏈系統,通常使用在圖片、音視頻、軟件等相關的資源上。css

  • 實現原理:把當前請求的主機與服務器的主機進行比對,若是不同則就是惡意連接,反之則是正常連接。html

  • 不說了,直接上代碼:
String address=request.getHeader("referer"); //獲取頁面的請求地址
 String pathAdd=""; //定義空字符串
 if(address!=null){ //判斷當前的頁面的請求地址爲空時
 URL urlOne=new URL(address);//實例化URL方法
 pathAdd=urlOne.getHost(); //獲取請求頁面的服務器主機
 }
 String address1=request.getRequestURL().toString(); //獲取當前頁面的地址
 String pathAdd1="";
 if(address1!=null){
 URL urlTwo=new URL(address1);
 pathAdd1=urlTwo.getHost(); //獲取當前服務器的主機
 }
 if(!pathAdd.equals(pathAdd1)){ //判斷當前頁面的主機與服務器的主機是否相同 
 }
  • 根據這個原理 能夠設置企業白名單

使用Request對象設置頁面的防盜鏈

  • 所謂的防盜鏈就是當你以一個非正常渠道去訪問某一個Web資源的時候,服務器會將你的請求忽略而且將你的當前請求變爲按正常渠道訪問時的請求並返回到相應的頁面,用戶只有經過該頁面中的相關操做去訪問想要請求的最終資源。java

  • 例如,你有一個訪問某資源的網址,可是你事先不知道這個網址是有防盜鏈的,那麼當你輸入該網址時你可能會發現,並無立刻跳轉到你想要的資源頁面而是一些無關的信息頁面,可是就是在這些信息頁面中你發現有一個超連接或是其餘操做能夠跳轉到你所訪問的最終資源頁面。瀏覽器

  • 這就是防盜鏈技術了,好了來看一個具體應用:服務器

Request.java  
  
  
package net.csdn.request;import java.io.IOException;  
import java.io.PrintWriter;import java.util.Enumeration  
import javax.servlet.RequestDispatcher;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
public class Request extends HttpServlet {  
public void doGet(HttpServletRequest request, HttpServletResponse response)  
throws ServletException, IOException {getDoorChain(request, response);}  
  
    private void getDoorChain(HttpServletRequest request,  
            HttpServletResponse response) throws IOException {  
        String referer = request.getHeader("referer");  
        if(referer==null || !referer.endsWith("http://localhost:8080/Request/index.jsp")){  
            response.sendRedirect("http://localhost:8080/Request/index.jsp");  
            return;  
        }  
        response.setCharacterEncoding("utf-8");  
        response.setContentType("text/html;charset =utf-8");  
        PrintWriter pw = response.getWriter();  
        pw.write("喜劇片《東成西就》");  
    }  
public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        doGet(request, response);  
    }  
  
}
index.jsp  
  
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<%  
String path = request.getContextPath();  
String basePath = request.getScheme()+"://"+request.getServerName()+":"  
+request.getServerPort()+path+"/";  
%>  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>  
    <base href="<%=basePath%>">  
      
    <title>My JSP 'index.jsp' starting page</title>  
    <meta http-equiv="pragma" content="no-cache">  
    <meta http-equiv="cache-control" content="no-cache">  
    <meta http-equiv="expires" content="0">      
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    <meta http-equiv="description" content="This is my page">  
    <!-- 
    <link rel="stylesheet" type="text/css" href="styles.css"> 
    -->  
  </head>  
    
  <body>  
  這裏是防盜鏈技術的應用檢測! <br>  
  <a href ="/Request/Request" >喜劇片 </a>  
    
  </body>  
</html>
  • 例如我最終想要經過http://lcoalhost:8080/Request/Request這個網址獲取到我想要的《東成西就》 的資源但是當我真正的輸入這個網址時,卻轉到了: http://localhost:8080/Request/index.jsp這個頁面jsp

  • 只有當你點擊「喜劇片」這個超連接時纔會真正的獲得你想要的資源頁面網站

什麼是Referer?

這裏的 Referer 指的是HTTP頭部的一個字段,也稱爲HTTP來源地址(HTTP Referer),用來表示從哪兒連接到目前的網頁,採用的格式是URL。換句話說,藉着 HTTP Referer 頭部網頁能夠檢查訪客從哪裏而來,這也常被用來對付僞造的跨網站請求。

什麼是空Referer,何時會出現空Referer?

  • 首先,咱們對空Referer的定義爲,Referer 頭部的內容爲空,或者,一個HTTP請求中根本不包含Referer頭部。ui

  • 那麼何時HTTP請求會不包含Referer字段呢?根據Referer的定義,它的做用是指示一個請求是從哪裏連接過來,那麼當一個請求並非由連接觸發產生的,那麼天然也就不須要指定這個請求的連接來源。url

  • 好比,直接在瀏覽器的地址欄中輸入一個資源的URL地址,那麼這種請求是不會包含Referer字段的,由於這是一個「憑空產生」的HTTP請求,並非從一個地方連接過去的。spa

  • 在防盜鏈設置中,容許空Referer和不容許空Referer有什麼區別?
  • 在防盜鏈中,若是容許包含空的Referer,那麼經過瀏覽器地址欄直接訪問該資源URL是能夠訪問到的;
  • 但若是不容許包含空的Referer,那麼經過瀏覽器直接訪問也是被禁止的。

  • 歡迎關注 http://yunlong.gihub.io

相關文章
相關標籤/搜索