1. 程式人生 > >java專家之路(四)——Web安全之——Xss注入類風險

java專家之路(四)——Web安全之——Xss注入類風險

簡介:

1. XSS攻擊原理

XSS原稱為CSS(Cross-Site Scripting),因為和層疊樣式表(Cascading Style Sheets)重名,所以改稱為XSS(X一般有未知的含義,還有擴充套件的含義)。XSS攻擊涉及到三方:攻擊者,使用者,web server。使用者是通過瀏覽器來訪問web server上的網頁,XSS攻擊就是攻擊者通過各種辦法,在使用者訪問的網頁中插入自己的指令碼,讓其在使用者訪問網頁時在其瀏覽器中進行執行。攻擊者通過插入的指令碼的執行,來獲得使用者的資訊,比如cookie,傳送到攻擊者自己的網站(跨站了)。所以稱為跨站指令碼攻擊。XSS可以分為反射型XSS和永續性XSS,還有DOM Based XSS。(一句話,XSS就是在使用者的瀏覽器中執行攻擊者自己定製的指令碼。)

1.1 反射型XSS

反射性XSS,也就是非永續性XSS。使用者點選攻擊連結,伺服器解析後響應,在返回的響應內容中出現攻擊者的XSS程式碼,被瀏覽器執行。一來一去,XSS攻擊指令碼被web server反射回來給瀏覽器執行,所以稱為反射型XSS。

特點:

  • 1> XSS攻擊程式碼非永續性,也就是沒有儲存在web server中,而是出現在URL地址中;
  • 2> 非永續性,那麼攻擊方式就不同了。一般是攻擊者通過郵件,聊天軟體等等方式傳送攻擊URL,然後使用者點選來達到攻擊的;

1.2 持久型XSS

區別就是XSS惡意程式碼儲存在web server中,這樣,每一個訪問特定網頁的使用者,都會被攻擊。

特點:

  • 1> XSS攻擊程式碼儲存於web server上;
  • 2> 攻擊者,一般是通過網站的留言、評論、部落格、日誌等等功能(所有能夠向web server輸入內容的地方),將攻擊程式碼儲存到web server上的;

有時永續性XSS和反射型XSS是同時使用的,比如先通過對一個攻擊url進行編碼(來繞過xss filter),然後提交該web server(儲存在web server中), 然後使用者在瀏覽頁面時,如果點選該url,就會觸發一個XSS攻擊。當然使用者點選該url時,也可能會觸發一個CSRF(Cross site request forgery)攻擊。

1.3 DOM based XSS

基於DOM的XSS,也就是web server不參與,僅僅涉及到瀏覽器的XSS。比如根據使用者的輸入來動態構造一個DOM節點,如果沒有對使用者的輸入進行過濾,那麼也就導致XSS攻擊的產生。過濾可以考慮採用esapi4js。

2. XSS 存在的原因

XSS 存在的根本原因是,對URL中的引數,對使用者輸入提交給web server的內容,沒有進行充分的過濾。如果我們能夠在web程式中,對使用者提交的URL中的引數,和提交的所有內容,進行充分的過濾,將所有的不合法的引數和輸入內容過濾掉,那麼就不會導致“在使用者的瀏覽器中執行攻擊者自己定製的指令碼”。

但是,其實充分而完全的過濾,實際上是無法實現的。因為攻擊者有各種各樣的神奇的,你完全想象不到的方式來繞過伺服器端的過濾,最典型的就是對URL和引數進行各種的編碼,比如escape, encodeURI, encodeURIComponent, 16進位制,10進位制,8進位制,來繞過XSS過濾。那麼我們如何來防禦XSS呢?

3. XSS 攻擊的防禦

XSS防禦的總體思路是:對輸入(和URL引數)進行過濾,對輸出進行編碼。

也就是對提交的所有內容進行過濾,對url中的引數進行過濾,過濾掉會導致指令碼執行的相關內容;然後對動態輸出到頁面的內容進行html編碼,使指令碼無法在瀏覽器中執行。雖然對輸入過濾可以被繞過,但是也還是會攔截很大一部分的XSS攻擊。

防範方法: