用JavaScript保护数据

时间:2011-12-04 08:20:57

标签: javascript html security

我必须为web测试创建生成器(使用HTML和JavaScript)。 测试必须离线和在线工作。

正确的答案和分数评估必须是生成的测试的一部分。 然后,最终用户的分数仅被发送到服务器(评估不能在服务器上完成,服务器对问题一无所知 - 它只保存最终分数)。

有没有办法让正确的答案作为测试的一部分,并且不允许用户使用Firebug轻松找到它们?

4 个答案:

答案 0 :(得分:4)

对你的问题没有真正好的解决方案。你可以做的唯一事情是minifyingencrypting你的javascript,使其难以阅读和使用奇怪的变量名。

不能完全隐藏它,因为浏览器本身必须解释它,而人类可以总是解密和操纵它(使用像你说的firebug) ,例如)。

最好的方法是重建整个事物而不依赖于客户端代码中的安全数据 - 我知道你说它不可能,但我确信它是。也许它很复杂,但却是唯一真正安全的方式。

修改
我忘了你说它必须离线工作 - 在这种情况下我同意客户端代码是要走的路......如上所述,你唯一的办法是加密/缩小然后希望没有人有足够的动力来完成丑陋的代码。

答案 1 :(得分:2)

我想你可以看看这个JavaScript encryption utility

AMAIK,当您向客户发送任何数据时,数据就在那里,可以看到。如果它被混淆了,它可以很容易地调整。如果它是编码的,它可以被解码。但是,如果它是加密的,那么对于解密过程,您需要相应的。现在,如果您使用了对称加密,那么密钥就在您的服务器上,这意味着您仍然需要服务器存在于您的设计中,这符合您的要求:

  

测试必须脱机工作

如果您使用非对称加密,则会在发送的邮件旁边发送公钥。这意味着密钥在客户端就可以用于解密数据了。

因此,尽管您只想在客户上工作,但似乎没有严格的方法。

答案 2 :(得分:1)

取决于您“轻松”的含义。如果我做'查看来源'并看到'answer1 =“monkey”; answer2 =“dog”'那么这很容易,但超出了一些人的知识。如果我做'查看源'并看到'answer1 =“axdfgja”'那么我将花费几秒钟尝试解码它(rot13?)然后寻找执行它的javascript代码。再一次,超出了一些人的知识。

毫无疑问,有些模糊技术是我所不知道的(他谦虚地说),但客户无法完成任何工作。如果您正在脱机工作,那么这是混淆而不是加密。用C和汇编编写的类似系统(因此需要更多努力才能弄清楚)已被破解。

所以这一切都取决于您认为用户将多少努力和技能打破它。

答案 3 :(得分:0)

Javascript在客户端执行。完全。

即使您使用代码混淆器,加密实用程序等,最后,eval()也可以用document.write()代替,而您的宝贵秘密不再是那个秘密。

jscompress这样的代码缩小器缩小了代码以使其更小,但最终,未编译的代码被提供给eval()。此时,有人确定阅读并理解您的密码可以在那里放置一个断点并检索未压缩的代码。