激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 后端Java開發如何防御XSS攻擊

后端Java開發如何防御XSS攻擊

2021-06-30 23:25碼農小胖哥 Java教程

跨站腳本攻擊(XSS)可以讓攻擊者在受害者的瀏覽器中執行惡意腳本來修改網頁內容、將用戶重定向到非法網站、偽造用戶登錄態、竊取用戶的隱私信息、甚至還能給程序開個后門等等,所以不得不防。

后端Java開發如何防御XSS攻擊

跨站腳本攻擊(XSS)可以讓攻擊者在受害者的瀏覽器中執行惡意腳本來修改網頁內容、將用戶重定向到非法網站、偽造用戶登錄態、竊取用戶的隱私信息、甚至還能給程序開個后門等等,所以不得不防。今天就來分享幾種常用的防范XSS攻擊的措施。

XSS攻擊

 

可能上面說的不夠直觀,下面我們來看一下XSS攻擊的方式。假設我們寫了一個注冊用戶接口:

  1. POST /user 
  2. Host: api.felord.cn 
  3. {  
  4.   "userId" : 1001,  
  5.   "username" : "felord.cn",  
  6.   "type" : "\<script\>alert(document.cookie)\</script\>"  

這樣的用戶如果查詢出來并被渲染到前端時,type字段的值很容易被當做腳本執行,這是就是一種常見的XSS攻擊。胖哥在剛剛入行的時候就遇到過,有人利用XSS掛他自己的廣告到我們的網站中來牟取利益。我們需要在應用中做一些防御措施。

防范XSS攻擊的手段

 

下面就是我比較常用的手段。

X-XSS-Protection請求頭

X-XSS-Protection 響應頭是 IE,Edge,Chrome 和 Safari 的一個特性,當檢測到跨站腳本攻擊 (XSS) 時,瀏覽器將停止加載頁面。

  1. # 0 表示禁止XSS過濾  1 表示開啟XSS過濾 
  2. X-XSS-Protection: 0 
  3. X-XSS-Protection: 1 
  4. # 啟用XSS過濾。 如果檢測到攻擊,瀏覽器將不會清除頁面,而是阻止頁面加載。 
  5. X-XSS-Protection: 1; mode=block 
  6. # 啟用XSS過濾 (谷歌瀏覽器專用)。 如果檢測到跨站腳本攻擊,瀏覽器將清除頁面并使用CSP report-uri指令的功能發送違規報告。  
  7. X-XSS-Protection: 1; report=<reporting-uri> 

大部分瀏覽器都支持這一特性。

后端Java開發如何防御XSS攻擊

瀏覽器兼容性

可以看得出X-XSS-Protection的兼容性還是很好的,不過它的保護性比較弱。默認情況下,Spring security 會自動添加此請求頭。

CSP請求頭

上面已經提到了CSP,全稱Content-Security-Policy(內容安全策略),它也是以請求頭的形式存在。它允許站點管理者控制用戶代理能夠為指定的頁面加載哪些資源。除了少數例外情況,設置的政策主要涉及指定服務器的源和腳本結束點。這將幫助防止跨站腳本攻擊(XSS)。它的控制粒度更細,它通過一系列的指令聲明可以決定URL、多媒體資源、字體的加載策略、腳本的執行策略。具體可以查看Content-Security-Policy文檔。

例如僅支持執行來自https://felord.cn的腳本:

  1. Content-Security-Policy: script-src https://felord.cn 

目前主流的瀏覽器也都支持該特性。

后端Java開發如何防御XSS攻擊

支持CSP的瀏覽器

在Spring Security中我們可以這樣配置它:

  1. httpSecurity.headers() 
  2.     .contentSecurityPolicy(“script-src https://felord.cn”) 

編碼過濾轉義

除此之外我們還可以使用編碼的形式來轉義請求參數和響應體的字符來防止XSS攻擊。這里會用到Spring提供的工具類org.springframework.web.util.HtmlUtils,當然Apache Commons也有類似的工具類。

  1. HtmlUtils.htmlEscape(String value) 

利用上面這個方法我們可以針對性的編寫HttpServletRequestWrapper的實現來對請求參數進行轉義:

  1. import org.springframework.web.util.HtmlUtils; 
  2.  
  3. import javax.servlet.http.HttpServletRequest; 
  4. import javax.servlet.http.HttpServletRequestWrapper; 
  5. import java.util.stream.Stream; 
  6.  
  7. public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { 
  8.  
  9.     public XssHttpServletRequestWrapper(HttpServletRequest request) { 
  10.         super(request); 
  11.     } 
  12.  
  13.     @Override 
  14.     public String getHeader(String name) { 
  15.         String value = super.getHeader(name); 
  16.         return HtmlUtils.htmlEscape(value); 
  17.     } 
  18.  
  19.     @Override 
  20.     public String getParameter(String name) { 
  21.         String value = super.getParameter(name); 
  22.         return HtmlUtils.htmlEscape(value); 
  23.     } 
  24.  
  25.     @Override 
  26.     public String[] getParameterValues(String name) { 
  27.         String[] values = super.getParameterValues(name); 
  28.         return values != null ? (String[]) Stream.of(values
  29.                 .map(HtmlUtils::htmlEscape).toArray() : 
  30.                 super.getParameterValues(name); 
  31.     } 
  32.  
  33. }  

結合 Servlet Filter 或者Spring MVC 攔截器。

編寫JSON序列化來實現對JSON返回的轉義,例如Jackson中自定義XSS序列化

  1. public class XssStringJsonSerializer extends JsonSerializer<String> { 
  2.  
  3.  @Override 
  4.  public Class<String> handledType() { 
  5.   return String.class; 
  6.  } 
  7.  
  8.  @Override 
  9.  public void serialize(String value, JsonGenerator jsonGenerator, 
  10.    SerializerProvider serializerProvider) throws IOException { 
  11.   if (value != null) { 
  12.    jsonGenerator.writeString(HtmlUtils.htmlEscape(value)); 
  13.   } 
  14.  } 

總結

 

今天介紹了幾種常用的防止XSS攻擊的方式,主要是涉及后端的。其實像一些現代的前端框架都支持將字符串變量轉義,比如React的JSX。不過話又說回來,提高應用的安全的根本方法就在于降低攻擊者的收益和提高攻擊者的成本。

原文鏈接:https://mp.weixin.qq.com/s/J4IFzCQlM5G0IyIFsqZz5g

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 在线观看中文字幕国产 | 久久精品国产99国产精品澳门 | 羞羞视频免费网站日本动漫 | 日日草天天干 | 全免费午夜一级毛片真人 | 黄色视屏免费在线观看 | 成人在线观看免费高清 | 国产一区在线免费 | 毛片成人网 | 久久免费视频精品 | 一区二区三区小视频 | 激情久久免费视频 | 在线亚洲播放 | 日韩av日韩 | 国产羞羞视频 | 亚洲成年人免费网站 | 午夜视频国产 | 国产黄色录像片 | 宅男噜噜噜66国产免费观看 | 亚洲成人网一区 | 精品一区二区三区免费视频 | 亚洲导航深夜福利涩涩屋 | 97香蕉超级碰碰久久免费软件 | 国产精品一区视频 | 久久国产综合精品 | 久草影音 | 一区二区久久精品66国产精品 | 好吊色欧美一区二区三区四区 | 免费看黄色一级片 | 最新一级毛片 | 国产一区二区影视 | 成年免费大片黄在线观看岛国 | 91精品国产手机 | 免费看日产一区二区三区 | 久久久久亚洲精品 | 日韩欧美精品中文字幕 | 操穴视频 | 国产精品区在线12p 午夜视频在线免费播放 | 人人舔人人插 | 97中文字幕第一一一页 | 在线播放免费播放av片 |