在一个刽子手的游戏中,单词是一个数组, 然后用户可以访问所有要访问的单词: http://www.mygame.com/js/functions.js 有没有办法让用户看不到它们(不使用数据库)?
答案 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%的人试图作弊。