【问题标题】:Javascript Security ConcernJavascript 安全问题
【发布时间】:2012-10-12 17:52:12
【问题描述】:

在我之前的问题中: Securing javascript game timing

... 很明显,Javascript/Canvas 游戏中的客户端计时根本不安全。我知道不信任客户的口头禅——这首先是导致我挣扎的原因。 :-)

所以,如果我确实将所有时间转移到服务器并处理它,这是一个后续问题。游戏显然需要在提交之前完成。由于游戏拼图全是 Javascript,这就引入了操纵客户端代码来伪造游戏完成的问题。

我在一个单独的类文件中创建了游戏 JS 代码。如果我这样实例化游戏:

var game;
$document.ready(function(){
  game = new Game();
});

...然后,我可以通过控制台访问“游戏”对象及其所有方法和变量。

但是,如果我这样做:

$document.ready(function(){
  var game = new Game();
});

...然后我无法通过控制台访问“游戏”对象。这似乎有帮助,但有什么我不知道的 - 这个对象仍然可以以某种我不知道的方式访问,还是让它成为该函数中的私有 var 更安全一些?

谢谢!

【问题讨论】:

  • 这完全取决于您的黑客准备付出多少努力。他们可以编写或使用几种开源 javascript 实现之一,并在他们完全控制的沙箱中运行您的代码。但是完全忽略执行 javascript 并弄清楚如何计算响应以发送服务器以“完成游戏”可能要简单得多。
  • 显然你无法阻止他们操纵它,你所能做的就是让它变得更难做。将游戏存储在范围内确实会拒绝他们访问该游戏,但是是什么阻止他们生成自己有权访问的游戏?
  • @Kevin - 是的,我以为我在范围内有一些东西 - 没有考虑他们实例化自己的。至于黑客准备投入多少努力——如果这个项目成功了,可能会有足够的动力,所以我只是从一开始就试着提前思考。感谢您的帮助。

标签: javascript jquery security


【解决方案1】:

不要太在意控制台。是的,如果有全局对象的方法可以很容易地被触发以“赢得”游戏,那么作弊的可能性很大,但正如您所演示的那样,它很容易被阻止。

因此,黑客只会监听(查看网络窗格)向您的服务器发出的请求并手动触发它们。如果它们只是一些简单的 url,如 /action=start/action=end,他可以很容易地手动触发它们而无需任何时间。因此,您需要防止这种情况发生(尽管您永远无法真正做到安全),例如通过添加额外的凭证令牌。或者你可以在游戏代码中嵌入一些“秘密”,这些“秘密”在游戏过程中被泄露,需要发送到服务器以证明其合法性。当然,它们可以从您的代码中读取出来,但您必须让黑客过于复杂。有点像security by obscurity...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    相关资源
    最近更新 更多