校驗Referer頭,防範CSRF(跨站請求僞造)攻擊的攔截器

  1. public final static String domainName = "192.168.2.123";  

 

 

Java代碼   收藏代碼
  1. package com.web.interceptors;  
  2.   
  3. import org.apache.log4j.Logger;  
  4. import org.apache.struts2.ServletActionContext;  
  5.   
  6. import com.opensymphony.xwork2.ActionInvocation;  
  7. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
  8. import com.trace.web.utils.Constants;  
  9.   
  10. /** 
  11.  * 對管理員操做,校驗Referer頭,防範CSRF(跨站請求僞造)攻擊的攔截器 
  12.  * @author admin 
  13.  */  
  14. public class AuthInterceptor extends AbstractInterceptor {  
  15.   
  16.     private static final long serialVersionUID = -2154056039548254482L;  
  17.       
  18.     private static Logger log = Logger.getLogger(AuthInterceptor.class);  
  19.   
  20.     @Override  
  21.     public String intercept(ActionInvocation invocation) throws Exception {  
  22.         String referer = ServletActionContext.getRequest().getHeader("Referer");  
  23.         if((referer!=null) && (referer.trim().startsWith(Constants.HTTP + Constants.domainName))){  
  24.             return invocation.invoke();  
  25.         }  
  26.         log.info("referer : " + referer);  
  27.         return "error";  
  28.     }  

 CSRF攻擊原理比較簡單,其中Web A爲存在CSRF漏洞的網站,Web B爲攻擊者構建的惡意網站,User C爲Web A網站的合法用戶。web

1. 用戶C打開瀏覽器,訪問受信任網站A,輸入用戶名和密碼請求登陸網站A;apache

2.在用戶信息經過驗證後,網站A產生Cookie信息並返回給瀏覽器,此時用戶登陸網站A成功,能夠正常發送請求到網站A;瀏覽器

3. 用戶未退出網站A以前,在同一瀏覽器中,打開一個TAB頁訪問網站B;併發

4. 網站B接收到用戶請求後,返回一些攻擊性代碼,併發出一個請求要求訪問第三方站點A;dom

5. 瀏覽器在接收到這些攻擊性代碼後,根據網站B的請求,在用戶不知情的狀況下攜帶Cookie信息,向網站A發出請求。網站A並不知道該請求實際上是由B發起的,因此會根據用戶C的Cookie信息以C的權限處理該請求,致使來自網站B的惡意代碼被執行ide

相關文章
相關標籤/搜索