常見的瀏覽器攻擊分為兩種:
(1)第一種為XSS(跨站腳本攻擊)
(2)第二種為CSRF(跨站請求偽造)蝌戒。
(一)xss(跨站腳本攻擊)
定義:XSS 全稱是 Cross Site Scripting瓶颠,為了與“CSS”區(qū)分開來刺桃,故簡稱 XSS,翻譯過來就是“跨站腳本”瑟慈。XSS 攻擊是指黑客往 HTML 文件中或者 DOM 中注入惡意腳本,從而在用戶瀏覽頁面時(shí)利用注入的惡意腳本對用戶實(shí)施攻擊的一種手段借杰。
存在原因:
瀏覽器為了在安全和自由之間找到一個(gè)平衡點(diǎn)进泼。支持了頁面中的引用第三方資源和 跨域資源共享(CORS),這樣做帶來了很多安全問題乳绕,其中最典型的就是 XSS 攻擊洋措。
攻擊方式
存儲型 XSS 攻擊
1.首先黑客利用站點(diǎn)漏洞將一段惡意 JavaScript 代碼提交到網(wǎng)站的數(shù)據(jù)庫中;
2.然后用戶向網(wǎng)站請求包含了惡意 JavaScript 腳本的頁面;
3.當(dāng)用戶瀏覽該頁面的時(shí)候贺嫂,惡意腳本就會執(zhí)行
反射型 XSS 攻擊
1.惡意 JavaScript 腳本屬于用戶發(fā)送給網(wǎng)站請求中的一部分雁乡。
2.隨后網(wǎng)站又把惡意 JavaScript 腳本返回給用戶。
3.惡意 JavaScript 腳本就可以在用戶頁面中被執(zhí)行
基于 DOM 的 XSS 攻擊
基于 DOM 的 XSS 攻擊是不牽涉到頁面 Web 服務(wù)器的踱稍。黑客通過各種手段將惡意腳本注入用戶的頁面中,比如通過網(wǎng)絡(luò)劫持在頁面?zhèn)鬏斶^程中修改 HTML 頁面的內(nèi)容,這種劫持類型很多桥温,有通過 WiFi 路由器劫持的梁丘,有通過本地惡意軟件來劫持的,它們的共同點(diǎn)是在 Web 資源傳輸過程或者在用戶使用頁面的過程中修改 Web 頁面的數(shù)據(jù)氛谜。
危害
竊取 Cookie 信息
竊取到Cookie后,就可以在其他電腦上模擬用戶的登錄澳腹。
監(jiān)聽用戶行為
可以使用“addEventListener”接口來監(jiān)聽鍵盤事件
修改 DOM
可以通過修改 DOM 偽造假的登錄窗口杨何,用來欺騙用戶輸入用戶名和密碼等信息
防御
服務(wù)器對輸入腳本進(jìn)行過濾或轉(zhuǎn)碼
充分利用 CSP
實(shí)施嚴(yán)格的 CSP 可以有效地防范 XSS 攻擊,具體來講 CSP 有如下幾個(gè)功能:
1.限制加載其他域下的資源文件
2.禁止向第三方域提交數(shù)據(jù)羊娃,這樣用戶數(shù)據(jù)也不會外泄埃跷;
3.禁止執(zhí)行內(nèi)聯(lián)腳本和未授權(quán)的腳本;
4.還提供了上報(bào)機(jī)制弥雹,這樣可以幫助我們盡快發(fā)現(xiàn)有哪些 XSS 攻擊,以便盡快修復(fù)問題挺智。
防止Cookie被盜用,使用 HttpOnly 屬性
使用 HttpOnly 標(biāo)記的 Cookie 只能使用在 HTTP 請求過程中,所以無法通過 JavaScript 來讀取這段 Cookie二鳄。
(二)CSRF
定義: CSRF 英文全稱是 Cross-site request forgery媒怯,是指黑客引誘用戶打開黑客的網(wǎng)站,在黑客的網(wǎng)站中扇苞,利用用戶的登錄狀態(tài)發(fā)起的跨站請求。簡單來講脖苏,CSRF 攻擊就是利用了用戶的登錄狀態(tài)定踱,并通過第三方的站點(diǎn)來做一些壞事。而且CSRF 攻擊并不需要將惡意代碼注入用戶的頁面崖媚,僅僅是利用服務(wù)器的漏洞和用戶的登錄狀態(tài)來實(shí)施攻擊
存在原因
利用了web中用戶身份驗(yàn)證的一個(gè)漏洞:簡單的身份驗(yàn)證只能保證請求發(fā)自某個(gè)用戶的瀏覽器畅哑,卻不能保證請求本身是用戶自愿發(fā)出的。
攻擊方式
自動發(fā)起 Get 請求
自動發(fā)起 POST 請求
引誘用戶點(diǎn)擊鏈接
這幾種攻擊方式的前提
目標(biāo)站點(diǎn)一定要有 CSRF 漏洞荠呐;
用戶要登錄過目標(biāo)站點(diǎn),并且在瀏覽器上保持有該站點(diǎn)的登錄狀態(tài)濒募;
需要用戶打開一個(gè)第三方站點(diǎn)圾结,可以是黑客的站點(diǎn),也可以是一些論壇筝野。
危害
利用登陸態(tài)歇竟,可以做任何你登陸某網(wǎng)站后的操作,例如轉(zhuǎn)賬焕议,更改信息等等
防御
充分利用好 Cookie 的 SameSite 屬性
Cookie 的SameSite屬性用來限制第三方 Cookie,從而減少安全風(fēng)險(xiǎn)唤锉。他可以設(shè)置三個(gè)值
1.Strict
瀏覽器會完全禁止第三方 Cookie,跨站點(diǎn)時(shí)窿祥,任何情況下都不會發(fā)送 Cookie。換言之嗤瞎,只有當(dāng)前網(wǎng)頁的 URL 與請求目標(biāo)一致听系,才會帶上 Cookie。
2.Lax
在跨站點(diǎn)的情況下Lax規(guī)則稍稍放寬掉瞳,大多數(shù)情況也是不發(fā)送第三方 Cookie髓帽,但是導(dǎo)航到目標(biāo)網(wǎng)址的 Get 請求除外脑豹。包括鏈接,預(yù)加載請求瘩欺,GET 表單。而如果在第三方站點(diǎn)中使用 Post 方法歌粥,或者通過 img拍埠、iframe 等標(biāo)簽加載的 URL,這些場景都不會攜帶 Cookie枣购。
3.None
在任何情況下都會發(fā)送 Cookie 數(shù)據(jù),最新版本的Chrome中Lax變?yōu)槟J(rèn)設(shè)置棉圈。這時(shí),網(wǎng)站可以選擇顯式關(guān)閉SameSite屬性胎围,將其設(shè)為None。不過白魂,前提是必須同時(shí)設(shè)置Secure屬性(Cookie 只能通過 HTTPS 協(xié)議發(fā)送),否則無效冒版。
驗(yàn)證請求的來源站點(diǎn)
根據(jù)HTTP 請求頭中的 Referer 和 Origin 屬性在服務(wù)器端驗(yàn)證請求來源的站點(diǎn)逞姿。Referer和Origin 都是 HTTP 請求頭中的一個(gè)字段,
1.Referer記錄了該 HTTP 請求的來源地址续室。
2.Origin屬性只包含了域名信息谒养,并沒有包含具體的 URL 路徑。
3.服務(wù)器的策略是優(yōu)先判斷 Origin买窟,如果請求頭中沒有包含 Origin 屬性始绍,再根據(jù)實(shí)際情況判斷是否使用 Referer 值瞳购。
CSRF Token
1.在瀏覽器向服務(wù)器發(fā)起請求時(shí)学赛,服務(wù)器生成一個(gè) CSRF Token吞杭。CSRF Token 其實(shí)就是服務(wù)器生成的字符串,然后將該字符串植入到返回的頁面中芽狗。
2.在瀏覽器端如果要發(fā)起某些請求,那么需要帶上頁面中的 CSRF Token曼月,然后服務(wù)器會驗(yàn)證該 Token 是否合法柔昼。如果是從第三方站點(diǎn)發(fā)出的請求,那么將無法獲取到 CSRF Token 的值聪姿,所以即使發(fā)出了請求,服務(wù)器也會因?yàn)?CSRF Token 不正確而拒絕請求末购。