微信公众号爆出前端安全漏洞
前言
昨日在公眾號(hào)中挖掘到了一個(gè) XSS 安全漏洞,目前該漏洞已經(jīng)上報(bào)給騰訊,具體復(fù)現(xiàn)流程如下:
發(fā)一篇公眾號(hào)文章,標(biāo)題中包含<input onfocus="alert('1')">
用戶(hù)打開(kāi)文章后,在寫(xiě)留言頁(yè)面中會(huì)發(fā)現(xiàn)標(biāo)題沒(méi)有被轉(zhuǎn)義,正常被渲染成了 HTML
用戶(hù)點(diǎn)擊被渲染出來(lái)的輸入框后執(zhí)行代碼
漏洞產(chǎn)生過(guò)程
現(xiàn)在我們來(lái)分析下這個(gè)漏洞的產(chǎn)生過(guò)程:
首先標(biāo)題中存在 HTML <input onfocus="alert('1')">,在網(wǎng)頁(yè)中如果不對(duì)這部分文本做轉(zhuǎn)義的話(huà),就會(huì)正常渲染為 HTML。
在文章詳情中其實(shí)我們并沒(méi)有發(fā)現(xiàn)這個(gè)問(wèn)題,也就說(shuō)明了在該頁(yè)面中開(kāi)發(fā)者是做了文本轉(zhuǎn)義的。
但是在留言頁(yè)面中卻出現(xiàn)了該問(wèn)題,也就是說(shuō)開(kāi)發(fā)者并沒(méi)有做標(biāo)題的轉(zhuǎn)義,因此導(dǎo)致了這個(gè)問(wèn)題的發(fā)生。
雖然這個(gè)問(wèn)題觸發(fā)條件不是那么容易,但是對(duì)于微信這樣億級(jí)日活的產(chǎn)品出現(xiàn)這樣低級(jí)的安全問(wèn)題實(shí)屬?zèng)]想到。
我們把這樣的安全問(wèn)題稱(chēng)之為 XSS 攻擊。根據(jù)攻擊的來(lái)源,我們可以將此類(lèi)攻擊分為三種,分別為:
反射型
存儲(chǔ)型
DOM 型
在這個(gè)案例中我們遇到的是存儲(chǔ)型 XSS 攻擊。此類(lèi)攻擊是攻擊者將惡意代碼提交至服務(wù)器并保存在數(shù)據(jù)庫(kù)中,用戶(hù)訪(fǎng)問(wèn)該頁(yè)面觸發(fā)攻擊行為。這種類(lèi)型的攻擊常見(jiàn)于保存用戶(hù)編輯數(shù)據(jù)的場(chǎng)景下,比如案例中的發(fā)表文章,亦或者評(píng)論場(chǎng)景等等。
防范存儲(chǔ)型 XSS 攻擊的策略就是不相信一切用戶(hù)提交的信息,比如說(shuō)用戶(hù)的評(píng)論、發(fā)表的文章等等。對(duì)于這些信息一律進(jìn)行字符串轉(zhuǎn)義,主要是引號(hào)、尖括號(hào)、斜杠
function escape(str) {
str = str.replace(/&/g, '&')
str = str.replace(/</g, '<')
str = str.replace(/>/g, '>')
str = str.replace(/"/g, '&quto;')
str = str.replace(/'/g, ''')
str = str.replace(/`/g, '`')
str = str.replace(///g, '/')
return str
}
// "<script>alert(1)</script>"
escape('<script>alert(1)</script>')
但是在顯示富文本的場(chǎng)景下其實(shí)不能把所有的內(nèi)容都轉(zhuǎn)義了,因?yàn)檫@樣會(huì)把需要的格式也過(guò)濾掉。對(duì)于這種情況,通常考慮采用白名單過(guò)濾的辦法。
// 使用 js-xss 開(kāi)源項(xiàng)目
const xss = require('xss')
let html = xss('<h1 id="title">XSS</h1><script>alert("xss");</script>')
// -> <h1>XSS</h1><script>alert("xss");</script>
console.log(html)
在白名單的情況下,h1標(biāo)簽不會(huì)被轉(zhuǎn)義,但是script能被正常轉(zhuǎn)義。
最后
安全無(wú)小事,大家在做項(xiàng)目的時(shí)候應(yīng)該時(shí)刻關(guān)注在類(lèi)似場(chǎng)景下的可能出現(xiàn)的安全問(wèn)題。
歡迎大家來(lái)聊聊自己在項(xiàng)目中遇到的安全問(wèn)題。
總結(jié)
以上是生活随笔為你收集整理的微信公众号爆出前端安全漏洞的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2021经典美句摘抄短句
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?