永远不要相信客户。这是我的编码口号。所有javascript都可以通过足够的努力被覆盖或泄露。我想要了解的是如何。
假设我为游戏编写了一个函数checkStep()
- 每次玩家移动一个空格时,它会轮询服务器以检查是否有任何事件:HP再生,进入随机战斗,移动到下一个地图等。我问自己“自我,我将如何重写或禁用此功能?”研究发现了一些相互矛盾的结果。一些消息来源称,可以从控制台直接重新定义功能,其他人则说这将是一个更复杂的过程。
我的问题是:玩家在重写或禁用checkStep()
功能时需要做些什么?他们可以简单地从控制台重新定义它吗?他们是否必须翻录,修改和重新托管我的代码?你会怎么做?
请注意,我 不 询问如何确保此功能安全。 第一个留下“你的回答/评论”的人 可以尝试缩小它,但它仍然不会安全“或”放入一些 服务器端检查“正在被分号击败,作为一个 其余的例子。
答案 0 :(得分:2)
您可以使用Fiddler之类的Web调试代理为本地计算机执行此操作。这样的程序允许您拦截您下载的内容并摆弄它。因此,您可以编写该函数的新版本,然后在从服务器下载文件时使用该程序将其替换为您的版本。然后,对于本地计算机,代码将在新功能到位的情况下运行。 Fiddler网站上的web session manipulation页面还有一些细节。
答案 1 :(得分:0)
没有理由使用任何Javascript或浏览器。
如果普通用户可以使用他们的浏览器来玩游戏,那么任何用户都可以使用任何程序与服务器通信并将其发送给他们想要的任何内容。服务器无法知道是否有人使用浏览器连接到它。
这适用于任何事情。游戏服务器不知道用户是否通过官方游戏客户端连接到它。由于官方游戏是封闭源代码,即使可以对所使用的协议进行反向工程并使用任何东西连接到服务器,也很容易陷入信任状态。
答案 2 :(得分:0)
复杂的事情,比如创建恶意游戏客户端,或者使用代理在内容进入浏览器之前改变内容,这些都是技术上有效的点,但这对于一些非常简单的事情来说似乎需要付出很多努力。
var checkStep = function() {
... // your original function
}
// later on
checkStep = function() {
alert('foo');
}
在JavaScript中更改变量所具有的功能是完全有效的。您定义的任何功能都可以在客户端重新定义。这可以通过浏览器加载的其他脚本文件来完成,这些脚本文件使用冲突的变量名称,通过XSS注入的脚本或者用户打开控制台。