我正在使用Javascript实现一个简单的游戏,并希望有一个在线高分榜,以便玩家可以相互竞争。我有两个问题:
- 为此目的我需要什么最简单的服务器端程序?我不需要一个完整的“Web应用程序”,只需要一个简单的程序来接收POST请求,更新数据库并返回得分列表。我熟悉Django。您有什么建议吗?
- 如何使高分榜相对安全?我知道要使其对于能力强、专注的黑客防御困难,但我不希望任何有访问JavaScript源代码权限的人都能够轻松地提交虚假得分。有什么工具可以做到这一点吗?
我正在使用Javascript实现一个简单的游戏,并希望有一个在线高分榜,以便玩家可以相互竞争。我有两个问题:
submitHighScore(n)
,那么他们可以在该页面的地址栏中键入javascript:submitHighScore(10000000),并使其起作用。1.) 任何能够与数据库通信并理解JSON或其他格式的CGI脚本都可以完成工作。
然而,如果您熟悉Django,则在Django之上构建服务器将是最简单的选择,因为您需要学习的内容以及需要编写的应用程序代码量相对较少。如果您从头开始编写看似简单的CGI脚本,它可能会变得相当复杂。
我发现django-piston是一个方便的Django应用程序,可以快速编写REST风格的API服务器。它支持JSON,因此应该很容易与您的JavaScript游戏进行接口。
2.) 最普通的黑客将采取重放攻击及其变体:窥视页面源代码并执行JavaScript函数,拦截HTTP请求并重新发送它(使用Firefox附加组件Tamper Data应该很容易)。
为了抵消前者,您可以混淆源代码和HTTP正文;
可以通过要求所有更新请求包含最近从服务器获取的一次性密码(维基百科文章中的“会话令牌”)来防止后者。
您可以使用上述方法之一的组合,也可以要求用户注册才能发布高分。未注册用户可以查看其当前得分与现有高分的比较,但为了在线发布您的高分,您必须已经使用注册帐户登录或在应用程序更新分数时提供它。
类似于“您的最高分是X,在高分表中排名###。要在线发布此分数,请先注册。”的简单消息。