從HTML 5游戲BrowserQuest看代碼漏洞
聲明:作弊并不是什么好事,我不提倡作弊。我也不想諷刺Mozilla的代碼質(zhì)量(實(shí)際上其代碼糟透了)。我不是超級(jí)黑客,也不想在此唱高調(diào)。只是想演示一下我在Mozilla新游戲上是如何作弊的,以后大家在編寫HTML5游戲時(shí)要注意避免這些問(wèn)題。我的***個(gè)編程實(shí)例非常簡(jiǎn)單。為了將Bard’s Tale游戲通過(guò)磁盤編輯器進(jìn)行編輯并存入我的Apple 2e,我不得不學(xué)習(xí)16進(jìn)制。
首先,介紹一下背景,前段時(shí)間Mozilla發(fā)布了一款新游戲Browser Quest。這是一款多人在線游戲。游戲規(guī)則并不復(fù)雜。任何人都可以一試。但是作為HTML5實(shí)現(xiàn)的一個(gè)例子,這的確很酷。
進(jìn)入網(wǎng)站,輸入用戶名,選擇角色(此功能的實(shí)現(xiàn)有點(diǎn)難度),然后就可以開(kāi)始游戲了。
真正酷的是,Mozilla把整個(gè)游戲開(kāi)放了源代碼,包括前臺(tái)客戶端和后臺(tái)技術(shù)。如果有興趣,可以在這里下載源碼:https://github.com/mozilla/BrowserQuest。
為了進(jìn)行研究,我玩了一下這款游戲,馬上就意識(shí)到它用的是本地存儲(chǔ)。我用Chrome extension(LocalStorage Monitor)來(lái)檢測(cè)該游戲是否真的使用本地存儲(chǔ),結(jié)果發(fā)現(xiàn):
首先我注意到,裝備清單是在本地存儲(chǔ)的,這就意味著我可以隨便修改我的裝備。查看代碼后我發(fā)現(xiàn),裝備清單中的裝備是被限定在一定范圍內(nèi)的,范圍的大小由一個(gè)簡(jiǎn)單的數(shù)字指標(biāo)來(lái)確定。如果把自己的裝備都改成了***裝備,那么系統(tǒng)會(huì)重置裝備清單。
所以,***步就是到控制臺(tái)復(fù)制數(shù)據(jù):
copy(localStorage["data"])
這樣就把數(shù)據(jù)(JSON 字符串)復(fù)制到了剪切板,然后粘貼到記事本并編輯這兩個(gè)值:
- {"hasAlreadyPlayed":true,"player":
- {"name":"Romana","weapon":"goldensword","armor":"goldenarmor","image":"data:image/png;base64,deleted"},"achievements":
- {"unlocked":
- [2,5,11,6],"ratCount":3,"skeletonCount":1,"totalKills":5,"totalDmg"
獲取字符串并返回控制臺(tái)……
- localStorage["data"] = (pasted my string here)
重新加載頁(yè)面,瞧—我變成了一個(gè)強(qiáng)大威武裝備精良的復(fù)仇者:
再次重申,我并不是在些貶低Mozilla的成果。該游戲的確是個(gè)很不錯(cuò)的示例。只是別忘了本地存儲(chǔ),這種實(shí)現(xiàn)方式太不安全了。
原文鏈接:http://css.dzone.com/articles/how-i-cheated-mozillas-new
【編輯推薦】