如何向用户隐藏javascript变量?

时间:2013-12-09 17:26:23

标签: javascript html arrays hide

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

6 个答案:

答案 0 :(得分:4)

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

作为替代解决方案,您可以将此验证逻辑移至您的服务器并将您的信息发送给它,以检查它是否有效。

编辑:如果您无法将验证移至服务器,则使用André的答案中建议的MD5或SHA1等哈希实际上是一个明智之举。您还可以添加salt以保护其免受rainbow table漏洞。

答案 1 :(得分:2)

客户端的最佳方式

使用MD5哈希!

一般最好的选择

让后端处理验证。


<强>替代地

您可以从服务器获取它们。并将它们直接加载到Closure中。

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

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;
    }
})();

然后再添加一些混淆,就像其他人提到的那样。这可能与你能做的一样多,让它变得有点“难”。但无论如何,只要你做验证客户端。

答案 2 :(得分:1)

单独混淆不是答案,因为这会混淆变量,而您要做的是加密变量中的字符串。字符串不会混淆。

我能给出的最佳非服务器端验证答案是:您可以通过多种方式手动加密字符串。最简单的方法之一是将字符串中的每个字符与某些值进行异或(在将其放入数组之前,然后在您想要引用该字符的任何时候)。这将使用户无法读取字符串,但是读取代码的人将看到您正在做的事情,然后可以解决它。尽管如此,这个加上混淆会解决你的大部分问题 - 如果有人想要去反混淆和解密你的代码到在Hangman作弊,他们就会花费太多时间。

答案 3 :(得分:0)

您可以对代码进行模糊处理。例如:http://www.javascriptobfuscator.com/Default.aspx

答案 4 :(得分:0)

你的话需要在服务器上存在。这不是仅限浏览器的。如果您希望用户能够暂停游戏并稍后完成游戏,那么您只需要一个数据库,但它是刽子手,因此可能没有必要。

答案 5 :(得分:0)

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

虽然您无法完全保护自己的数据,但是如果有人弄清楚它是什么,您可能会非常困难和乏味。我可能会以正常的方式玩游戏,如果这更容易,除非贵重物品受到威胁。

如果有人真的想查找答案,他们会花时间和精力这样做。如果我有一百万人的观众,我认为有可能阻止90%的人试图作弊。