如何向用户隐藏javascript变量

How to hide javascript variables to users?

本文关键字:javascript 变量 隐藏 用户      更新时间:2024-06-09

在刽子手游戏中,单词在一个数组中,然后用户可以访问所有的单词:http://www.mygame.com/js/functions.js有没有办法让用户看不到它们(不使用数据库)?

客户端的最佳方式

使用MD5哈希!

一般最佳选择

让后端处理验证。


或者

你可以从服务器上获取它们。并将它们直接加载到闭包中。

这样,它就不能作为公共变量使用,单词会在最后一刻发送。要添加到其中,可以对其进行模糊处理,或者让后端处理验证。

var validate = (function(){
    var words;
    // some ajax code to load the words...
    return function(word){
         // loop through words to see if it is there.'
         return true;
    }
})();

此外,正如其他人所提到的,还有一些混淆。这可能是你所能做的,让它变得有点"困难"。但不管怎样,只要你在客户端进行验证。

基本上没有。由于代码将在客户端运行,即使您对其进行模糊处理,用户也始终可以访问这些值。如果您使用某种模糊处理方法,您可能会让用户更难访问它,但您绝对无法向他完全隐藏您的数据

作为另一种解决方案,您可以将此验证逻辑移动到服务器,并将您的信息发送到服务器,以检查其是否有效。

编辑:如果不能将验证转移到服务器,那么使用André答案中建议的MD5或SHA1之类的哈希实际上是明智之举。你也可以添加盐来保护它免受彩虹桌的攻击。

混淆本身并不是解决问题的办法,因为这会混淆变量,而您要做的是加密变量中的字符串。字符串不会混淆。

我能给出的最好的非服务器端验证答案是:你可以用几种方式中的任何一种手动加密字符串。最简单的方法之一是将字符串中的每个字符与某个值异或(在将其放入数组之前,然后在任何时候引用该字符)。这会让用户无法读取字符串,但阅读代码的人会看到你在做什么,然后可以解决它。尽管如此,这种加上模糊处理可以解决你的大部分问题-如果有人想极端地对你的代码进行解密和解密,以在Hangman作弊,他们手头的时间太多了。

您可以混淆代码。例如:http://www.javascriptobfuscator.com/Default.aspx

您的单词需要存在于服务器上。这不仅仅是浏览器。如果你想让用户暂停游戏并稍后完成,你只需要一个数据库,但这是一个刽子手,所以这可能没有必要。

混乱是你的最佳选择。如果你要求你的游戏在客户端运行,那么一切都需要对他们可用。

虽然你不能完全保护你的数据,但你可能会让别人很难弄清楚它是什么。如果这更容易的话,我可能会用正常的方式玩游戏,除非贵重物品处于危险之中。

如果有人真的想找到答案,他们会花时间和精力去做。如果我有一百万观众,我认为阻止90%的人作弊是有价值的。