在學習xss漏洞之前我們先學習一下,什么叫做同源策略。
所謂同源策略指的是,瀏覽器對不同源的腳本或文本的訪問方式進行限制。
所謂同源指的是,域名,協議,端口相同。
在HTML語言中,有部分標簽在引用第三方資源時,不受同源策略的限制:
<script>
<img>
<iframe>
<link>
下面我們來說xss漏洞的原理:
跨站腳本攻擊(cross site scripting)的縮寫,惡意攻擊者往web頁面里插入惡意script代碼,當用戶瀏覽該頁之時,嵌入其中web里面的script代碼會被執行,從而達到惡意攻擊用戶的目的。
xss漏洞發生在目標網站中目標用戶的瀏覽器層面上,當用戶瀏覽器渲染整個HTML文檔的過程中,出現了不被預期的腳本指令並執行時,xss就會發生。
ps:xss漏洞通常指黑客通過“HTML注入”纂改了頁面,插入了惡意的腳本,從而在用戶瀏覽頁面時,控制用戶瀏覽器的一種攻擊。
xss漏洞分為三種DOM型,存儲型,反射型
DOM型:攻擊代碼在URL中,輸出在DOM節點中
存儲型:攻擊代碼在數據庫中,輸出在http響應中
反射型:攻擊代碼在URL中,輸出在http響應中
xss漏洞產生的原因:web應用程序對用戶的輸入過濾不足造成的。攻擊者利用網站漏洞把惡意代碼插入到頁面中,其他用戶瀏覽該頁面時,惡意代碼被執行。對受害用戶可采取cookie資料獲取,釣魚網站,會話劫持等攻擊
如何預防xss漏洞
一,給cookie的屬性設置為httponly
這樣能夠避免js讀取Cookie信息(設置后有助於緩解XSS,但是XSS除了劫持Cookie之外,還可以模擬用戶的身份進行操作)
二,進行輸入檢查
如果僅僅在客戶端通過JS來做輸入校驗,有可能會被攻擊者繞過,WEB開發中的普遍做法是同時在客戶端和服務端做校驗。這種輸入檢查的方式也稱之為XSS Filter。
三,輸出檢查
一般說來,除了富文本輸出之外,在變量輸出到HTML頁面時,可以使用編碼或者轉義的方式來防御XSS攻擊。
四,防御DOM BasedXSS
前面提到的集中方法,對於這種類型不太適用,需要特別對待,那如何才能防御呢?
首先是$var輸出到<script>是,應該執行一次javasriptEncode,其次在doument.write輸出到HTML頁面時,如果是輸出到事件或者腳本,可以再做一次javaScriptEncode,如果是輸出到HTML內容或者屬性,則可以做一次HtmlEncode。
上面提到的這些防御方法都屬於安全生產的環節,也就是說實在開發同學寫代碼的時候要特別注意,這種是否做的規范,可以通過工具掃描代碼的方式來實現,也就是白盒測試,如果代碼沒有做輸入或者輸出檢查,則發報告提示開發來進行修改。但是有些場景白盒沒法覆蓋到,例如輸出jsonp類型的接口,對於callback參數的原味輸出,白盒有時候就掃不出來,這時候,可以通過黑盒測試工具,模擬入參的各種情況,也就是窮舉,來構造,如果發生了XSS請求,則發出報告即可。
摘抄:
XSS跨站漏洞分為大致三種:儲存型XSS,反射型XSS,和DOM型XSS,一般都是由於網站對用戶輸入的參數過濾不嚴格而調用瀏覽器的JS而產生的。
-
儲存型XSS:
一般是構造一個比如說"<script>alert("XSS")</script>"的JS的彈窗代碼進行測試,看是否提交后在頁面彈窗,這種儲存型XSS是被寫入到頁面當中的,如果管理員不處理,那么將永久存在,這種XSS攻擊者可以通過留言等提交方式,把惡意代碼植入到服務器網站上, 一般用於盜取COOKIE獲取管理員的信息和權限。
-
反射型XSS:
一般是在瀏覽器的輸入欄也就是urlget請求那里輸入XSS代碼,例如:127.0.0.1/admin.php?key="><script>alert("xss")</script>,也是彈窗JS代碼。當攻擊者發送一個帶有XSS代碼的url參數給受害者,那么受害者可能會使自己的cookie被盜取或者“彈框“,這種XSS一次性使用,危害比儲存型要小很多。
-
dom型:
常用於挖掘,是因為api代碼審計不嚴所產生的,這種dom的XSS彈窗可利用和危害性並不是很大,大多用於釣魚。比起存儲型和反射型,DOM型並不常用。
跨站腳本攻擊(Cross Site Scripting),為了不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS。惡意攻擊者往Web頁面里插入惡意Script代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。
XSS攻擊分成兩類,一類是來自內部的攻擊,主要指的是利用程序自身的漏洞,構造跨站語句,如:dvbbs的showerror.asp存在的跨站漏洞。
