JS漏洞的程度

Degrees of JS vulnerability

本文关键字:程度 漏洞 JS      更新时间:2023-09-26

永远不要信任客户端。这是我的编码口头禅。只要付出足够的努力,所有javascript都可以被覆盖或破坏。我想了解的是如何。

比方说,我为一个游戏编写了一个函数checkStep()——每次玩家移动一个空格,它就会轮询服务器,以检查是否有任何事件:生命值再生、进入随机战斗、移动到下一个地图等。我问自己"我自己,我该如何重写或禁用这个函数?"研究发现了一些相互矛盾的结果。一些消息人士表示,可以从控制台直接重新定义函数,另一些消息人士则表示,这将是一个更复杂的过程。

我的问题是:玩家需要做什么才能重写或禁用我的checkStep()功能?他们能简单地从控制台重新定义它吗?他们必须撕毁、修改和重新托管我的代码吗?你会怎么做?

请注意,我是而不是询问如何确保此功能的安全。第一个留下"你可以尝试缩小它,但它仍然不安全"或"放入一些服务器端检查"正在被分号攻击

您可以使用像Fiddler这样的web调试代理为本地机器执行此操作。像这样的程序可以让你拦截下载的内容并对其进行篡改。因此,你可以编写一个新版本的函数,然后在从服务器下载文件时使用该程序将其替换为你的版本。然后,对于您的本地机器,代码将在新函数就位的情况下运行。Fiddler网站上的网络会话操作页面有一些详细信息。

甚至没有理由使用任何Javascript或浏览器。

如果一个普通用户可以使用浏览器玩游戏,那么任何用户都可以使用任何程序与服务器通信,并向服务器发送他们想要的任何内容。服务器无法知道是否有人正在使用浏览器连接到它。

这适用于任何事情。游戏服务器不知道用户是否通过官方游戏客户端连接到它。由于官方游戏是封闭源代码的,即使可以对所使用的协议进行逆向工程,并使用任何东西连接到服务器,也很容易陷入信任。

复杂的事情,如创建恶意游戏客户端,或在内容进入浏览器之前使用代理更改内容,在技术上都是有效的,但这似乎是一件非常简单的事情。

var checkStep = function() {
  ... // your original function
}
// later on
checkStep = function() {
  alert('foo');
}

在JavaScript中,更改变量的函数是完全有效的。您定义的任何函数都可以在客户端重新定义。这可以通过浏览器加载的使用冲突变量名的其他脚本文件、通过XSS注入的脚本或用户打开控制台来完成。