網(wǎng)絡(luò)安全——跨站攻擊
CSRF
什么是CSRF
CSRF乓梨,中文名叫跨站請求偽造村生,發(fā)生的場景就是诀艰,用戶登陸了a網(wǎng)站,然后跳轉(zhuǎn)到b網(wǎng)站灶轰,b網(wǎng)站直接發(fā)送一個a網(wǎng)站的請求,進(jìn)行一些危險操作儿奶,就發(fā)生了CSRF攻擊框往!
在發(fā)送一個http請求的時候,攜帶的cookie是這個http請求域的地址的cookie闯捎。也就是我在b網(wǎng)站椰弊,發(fā)送a網(wǎng)站的一個請求,攜帶的是a網(wǎng)站域名下的cookie瓤鼻!
我們在b網(wǎng)站下秉版,讀取cookie的時候,只能讀取b網(wǎng)站域名下的cookie茬祷,這是cookie的跨域限制清焕。所以要記住,不要把http請求攜帶的cookie,和當(dāng)前域名的訪問權(quán)限的cookie混淆在一起秸妥。
CSRF攻擊滚停,僅僅是利用了http攜帶cookie的特性進(jìn)行攻擊的,但是攻擊站點還是無法得到被攻擊站點的cookie粥惧。這個和XSS不同键畴,XSS是直接通過拿到Cookie等信息進(jìn)行攻擊的。
防止CSRF
- 放棄Cookie突雪、使用Token起惕!
- SameSite Cookies
Cookie有一個新的屬性——SateSite。能夠解決CSRF攻擊的問題咏删。
它表示惹想,只能當(dāng)前域名的網(wǎng)站發(fā)出的http請求,攜帶這個Cookie督函。
由于這是新的cookie屬性嘀粱,在兼容性上肯定會有問題。 - 服務(wù)端Referer驗證
header中會帶有Referer字段辰狡,這個字段代表的是當(dāng)前域的域名草穆,服務(wù)端可以通過這個字段來判斷,是不是“真正”的用戶請求搓译。當(dāng)然也存在Referer字段都偽造的情況
XSS
什么是XSS
XSS 是 Cross-site scripting 的簡稱,通俗來說就是跨站點腳本攻擊锋喜,即通過在客戶端注入可執(zhí)行腳本的方式來實現(xiàn)攻擊些己。
XSS攻擊的注入方式:
- 劫持HTML文件,通過 <script> 標(biāo)簽進(jìn)行注入
- 在可執(zhí)行的JS中嘿般,通過拼接數(shù)據(jù)來執(zhí)行惡意腳本
- 在頁面可執(zhí)行的元素中段标,添加可執(zhí)行代碼,例如 javascript:xxx(參考 XSS game-Level5)炉奴;
- 在onload逼庞、onerror、onclick等事件中瞻赶,注入不受控的代碼赛糟。
XSS攻擊的常見分類有
- 存儲型XSS
- 反射型XSS
- DOM型XSS
其中只有DOM型的XSS是于前端有關(guān)的,其他的防范主要是在后端方面砸逊。
存儲型XSS
這里有一個小案例璧南,比如你在看一個直播,這個直播是可以發(fā)送彈幕的师逸,如果這個時候有一個人發(fā)送了一段 <script>bad code</script> 代碼司倚,其中代碼的作用是獲取當(dāng)前直播的DOM節(jié)點,然后隱藏該元素。當(dāng)彈幕從黑客端發(fā)送到服務(wù)器动知,再從服務(wù)器發(fā)送到每一個用戶的頁面上皿伺,在沒有安全處理的情況下,這一場直播盒粮,就在這個頁面“結(jié)束了”鸵鸥。
??這是一個真實的案例,這個案例中發(fā)送的那一段代碼拆讯,就是存儲型的XSS攻擊脂男,惡意的腳本存儲到后端的數(shù)據(jù)庫,然后又傳輸回到每一個用戶的頁面种呐,從而發(fā)生了攻擊宰翅。
反射型XSS
惡意腳本不是存儲在數(shù)據(jù)庫了,而是出現(xiàn)在URL里
區(qū)別反射型XSS攻擊和存儲型XSS攻擊的點是:惡意代碼存儲的位置
DOM型XSS
DOM型的XSS攻擊與服務(wù)器沒有太大的關(guān)系爽室,不需要和服務(wù)器交互汁讼,直接通過HTTP劫持,修改對應(yīng)的HTML文件來實現(xiàn)惡意代碼的注入阔墩。
防止XSS
- 轉(zhuǎn)義嘿架,通過對不同類型的文本和數(shù)據(jù)做對應(yīng)的轉(zhuǎn)義和很好的防止大部分的XSS攻擊。
- CSP啸箫,通過在HTTP頭部添加Content-Security-Policy的字段來實現(xiàn)的
在較為嚴(yán)格的CSP條件下耸彪,對XSS攻擊的防范有以下的作用:
1.禁止加載外域代碼,防止復(fù)雜的攻擊邏輯忘苛;
2.禁止外域提交蝉娜,網(wǎng)站被攻擊后,用戶數(shù)據(jù)不會泄漏扎唾;
3.禁止內(nèi)聯(lián)腳本執(zhí)行召川;
4.禁止未授權(quán)的腳本執(zhí)行;
5.通過CSP的上報功能胸遇,便于修復(fù)問題荧呐。 - HttpOnly,HttpOnly 是 Cookie 的一個屬性纸镊,在設(shè)置Cookie的時候可以對Cookie設(shè)置該屬性倍阐,該屬性主要是防止Cookie被JS腳本獲取,只能通過Http傳輸和訪問薄腻。