XSS是一種出現(xiàn)在網(wǎng)頁開發(fā)過程中的的計算機安全漏洞,而XSS攻擊則是指通過利用這些遺留漏洞,將惡意指令代碼注入到網(wǎng)頁中,使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁程序。
一般情況下,攻擊者制造的惡意網(wǎng)頁是JAVAScript,但其實Java、 VBScript、ActiveX、 Flash、甚至是普通的html都包括在內(nèi)。
如果攻擊成功,則攻擊者會得到目標的部分高級權限、私密網(wǎng)頁、會話和cookie等各種內(nèi)容。
小 貼 士
XSS攻擊的中文譯名為跨站腳本攻擊,英文全拼是Cross Site Scripting。
這時候就有小伙伴會疑惑,明明縮寫是css,怎么就變成X了呢?
這是因為另一個名詞——層疊樣式表的縮寫也是CSS(全拼:Cascading Style Sheets),為了不和它混淆,才讓X代替了C。
看過了介紹,下面就和e小安再進一步了解XSS攻擊的“方方面面”。
XSS攻擊的分類
從攻擊代碼的工作方式看,它可以分為三個類型,分別是:
持久型,攻擊者可直接將攻擊代碼保存到服務端的數(shù)據(jù)庫中,每當用戶訪問帶有相應的查詢數(shù)據(jù)庫頁面時,攻擊就會開始。
反射型,發(fā)出請求時,攻擊代碼存在于URL中,隨后提交到服務器進行處理解析,處理完畢之后,XSS代碼隨同服務器響應內(nèi)容一并返回給瀏覽器,隨后瀏覽器解析執(zhí)行XSS代碼。
DOM型,這是一種特殊的反射型XSS,客戶端的腳本程序可以動態(tài)檢查和修改頁面內(nèi)容,而不依賴于服務器端的數(shù)據(jù)。受害者端的網(wǎng)頁腳本在修改本地頁面DOM環(huán)境時未進行合理的處置,而使得攻擊腳本被執(zhí)行。在整個攻擊過程中,服務器響應的頁面并沒有發(fā)生變化,引起客戶端腳本執(zhí)行結果差異的原因是對本地DOM的惡意篡改利用。
XSS常見繞過方式
大小寫繞過,在網(wǎng)站過濾了script這個關鍵字時,我們可以嘗試切換大小寫,例如Script、sCript等等任意大小寫組合,因為在腳本語言中,script字母大小寫的不同是不影響執(zhí)行的。
復寫繞過,有些網(wǎng)站會把script替換為空字符,這個時候我們雙寫script可以繞過,例如,scriSCRIPTpt,然后網(wǎng)站會把中間的大寫script替換為空字符,而外部小寫的scri和后面的pt就會拼接成script,成功繞過。
編碼繞過,對于一些過濾關鍵字的防護我們可以通過編碼的方式進行繞過,假如目標過濾了alert,我們就可以通過Unicode編碼進行繞過,然而編碼過的代碼不能被解析,我們可以通過eval()函數(shù)來執(zhí)行,這個函數(shù)可以對編碼過的內(nèi)容進行解碼之后再執(zhí)行。
主動閉合繞過,在用戶與瀏覽器進行交互之后,有些網(wǎng)站會修改某些元素,這個時候我們就可以審查頁面元素,使用 " 或者 > 來確定具體的繞過方式。
事件繞過,當無法對script進行繞過時,我們就需要通過其他的事件來觸發(fā)我們需要進行的操作,例如,οnclick=alert(1)、οnerrοr=alert(1)。
XSS攻擊常見防護措施
● 對特殊字符進行轉(zhuǎn)義,例如"、’、<、>、&、/
● 對關鍵字進行過濾,如常見的script、alert、onclick、onerror等
● 對用戶交互數(shù)據(jù)進行矯正,根據(jù)自己業(yè)務需求,對用戶輸入的數(shù)據(jù)是否符合規(guī)范進行判斷