【转载】从Mozilla的HTML5游戏Browser Quest看代码漏洞
声明:作弊并不是什么好事,我不提倡作弊。我也不想讽刺Mozilla的代码质量(实际上其代码糟透了)。我不是超级黑客,也不想在此唱高调。只是想演示一下我在Mozilla新游戏上是如何作弊的,以后大家在编写HTML5游戏时要注意避免这些问题。我的第一个编程实例非常简单。为了将Bard’s Tale游戏通过磁盘编辑器进行编辑并存入我的Apple 2e,我不得不学习16进制。
首先,介绍一下背景,前段时间Mozilla发布了一款新游戏Browser Quest。这是一款多人在线游戏。游戏规则并不复杂。任何人都可以一试。但是作为HTML5实现的一个例子,这的确很酷。
进入网站,输入用户名,选择角色(此功能的实现有点难度),然后就可以开始游戏了。
真正酷的是,Mozilla把整个游戏开放了源代码,包括前台客户端和后台技术。如果有兴趣,可以在这里下载源码: https://github.com/mozilla/BrowserQuest。
为了进行研究,我玩了一下这款游戏,马上就意识到它用的是本地存储。我用Chrome extension(LocalStorage Monitor)来检测该游戏是否真的使用本地存储,结果发现:
首先我注意到,装备清单是在本地存储的,这就意味着我可以随便修改我的装备。查看代码后我发现,装备清单中的装备是被限定在一定范围内的,范围的大小由一个简单的数字指标来确定。如果把自己的装备都改成了顶级装备,那么系统会重置装备清单。
所以,第一步就是到控制台复制数据:
copy(localStorage["data"])
这样就把数据(JSON 字符串)复制到了剪切板,然后粘贴到记事本并编辑这两个值:
{"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"
获取字符串并返回控制台……
localStorage["data"] = (pasted my string here)
重新加载页面,瞧—我变成了一个强大威武装备精良的复仇者:
再次重申,我并不是在些贬低Mozilla的成果。该游戏的确是个很不错的示例。只是别忘了本地存储,这种实现方式太不安全了。
作者:Raymond Camden
译者:林建光
原文链接: http://css.dzone.com/articles/how-i-cheated-mozillas-new
转载自: http://www.webapptrend.com/2012/05/2457.html#comment-988