国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 后端Java開(kāi)發(fā)如何防御XSS攻擊

后端Java開(kāi)發(fā)如何防御XSS攻擊

2021-06-30 23:25碼農(nóng)小胖哥 Java教程

跨站腳本攻擊(XSS)可以讓攻擊者在受害者的瀏覽器中執(zhí)行惡意腳本來(lái)修改網(wǎng)頁(yè)內(nèi)容、將用戶(hù)重定向到非法網(wǎng)站、偽造用戶(hù)登錄態(tài)、竊取用戶(hù)的隱私信息、甚至還能給程序開(kāi)個(gè)后門(mén)等等,所以不得不防。

后端Java開(kāi)發(fā)如何防御XSS攻擊

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

XSS攻擊

 

可能上面說(shuō)的不夠直觀,下面我們來(lái)看一下XSS攻擊的方式。假設(shè)我們寫(xiě)了一個(gè)注冊(cè)用戶(hù)接口:

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

這樣的用戶(hù)如果查詢(xún)出來(lái)并被渲染到前端時(shí),type字段的值很容易被當(dāng)做腳本執(zhí)行,這是就是一種常見(jiàn)的XSS攻擊。胖哥在剛剛?cè)胄械臅r(shí)候就遇到過(guò),有人利用XSS掛他自己的廣告到我們的網(wǎng)站中來(lái)牟取利益。我們需要在應(yīng)用中做一些防御措施。

防范XSS攻擊的手段

 

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

X-XSS-Protection請(qǐng)求頭

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

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

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

后端Java開(kāi)發(fā)如何防御XSS攻擊

瀏覽器兼容性

可以看得出X-XSS-Protection的兼容性還是很好的,不過(guò)它的保護(hù)性比較弱。默認(rèn)情況下,Spring security 會(huì)自動(dòng)添加此請(qǐng)求頭。

CSP請(qǐng)求頭

上面已經(jīng)提到了CSP,全稱(chēng)Content-Security-Policy(內(nèi)容安全策略),它也是以請(qǐng)求頭的形式存在。它允許站點(diǎn)管理者控制用戶(hù)代理能夠?yàn)橹付ǖ捻?yè)面加載哪些資源。除了少數(shù)例外情況,設(shè)置的政策主要涉及指定服務(wù)器的源和腳本結(jié)束點(diǎn)。這將幫助防止跨站腳本攻擊(XSS)。它的控制粒度更細(xì),它通過(guò)一系列的指令聲明可以決定URL、多媒體資源、字體的加載策略、腳本的執(zhí)行策略。具體可以查看Content-Security-Policy文檔。

例如僅支持執(zhí)行來(lái)自https://felord.cn的腳本:

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

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

后端Java開(kāi)發(fā)如何防御XSS攻擊

支持CSP的瀏覽器

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

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

編碼過(guò)濾轉(zhuǎn)義

除此之外我們還可以使用編碼的形式來(lái)轉(zhuǎn)義請(qǐng)求參數(shù)和響應(yīng)體的字符來(lái)防止XSS攻擊。這里會(huì)用到Spring提供的工具類(lèi)org.springframework.web.util.HtmlUtils,當(dāng)然Apache Commons也有類(lèi)似的工具類(lèi)。

  1. HtmlUtils.htmlEscape(String value) 

利用上面這個(gè)方法我們可以針對(duì)性的編寫(xiě)HttpServletRequestWrapper的實(shí)現(xiàn)來(lái)對(duì)請(qǐng)求參數(shù)進(jìn)行轉(zhuǎn)義:

  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. }  

結(jié)合 Servlet Filter 或者Spring MVC 攔截器。

編寫(xiě)JSON序列化來(lái)實(shí)現(xiàn)對(duì)JSON返回的轉(zhuǎn)義,例如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.  } 

總結(jié)

 

今天介紹了幾種常用的防止XSS攻擊的方式,主要是涉及后端的。其實(shí)像一些現(xiàn)代的前端框架都支持將字符串變量轉(zhuǎn)義,比如React的JSX。不過(guò)話(huà)又說(shuō)回來(lái),提高應(yīng)用的安全的根本方法就在于降低攻擊者的收益和提高攻擊者的成本。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 三级黄色在线视频 | 视频在线一区 | 免费观看黄色av网站 | 欧美一区二区在线观看 | 亚洲人成在线播放 | 中文字字幕一区二区三区四区五区 | 2012中文版免费观看 | 寡妇少妇高潮免费看蜜臀a 午夜免费电影 | 在线色网 | 香蕉yeye凹凸一区二区三区 | 夜夜摸夜夜操 | 97高清国语自产拍 | 91看视频| 欧美一区二区三区四区不卡 | 国产精品毛片久久久久久久 | 国产一区二区精品 | 91精品国产综合久久久久久漫画 | 国内精品视频在线观看 | 亚洲精品粉嫩美女一区 | 免费不卡视频 | 久久三区 | 亚洲精品视频一区 | 成人日韩在线观看 | 影音先锋中文字幕在线观看 | 日韩在线免费 | 91av免费在线观看 | 国产情侣免费视频 | 久久久成人免费一区二区 | 国产免费自拍av | 色噜噜狠狠一区二区三区狼国成人 | 国产视频一区二区在线 | 成年人免费观看网站 | 国产精品久久久久久久 | 91精品国产综合久久久久久 | 求av网站 | 视频在线一区二区 | 91一区二区| 波多野结衣先锋影音 | 国产中文字幕在线 | 日韩成人中文字幕 | 亚洲一区二区福利 |