2012-02-21 59 views
1

有没有办法'隐藏'javascript对象的结构和内容?客户端数据结构的JavaScript加密(或混淆)

我对有关用户的UI(和其他东西),我的客户端保持信息相当广泛的JavaScript对象。它包含许多关于用户将要操作的资源的信息。实际上,有Firebug的人可以打开控制台并查看所有数据的结构。出于安全原因,我对此并不满意。

有什么方法可以保护这些数据吗?

谢谢,

+4

*正确*保护这种数据的唯一方法是不让它在客户端。 – 2012-02-21 22:52:46

回答

1

如果这是一个安全问题,请不要发送给客户端。即使你对它进行混淆,你也不会使它更安全。

5

不,你不能保护这些数据。任何可以被浏览器看到和使用的东西都可以被浏览者看到并用于检查浏览器的功能。

你真的需要想想这是为什么呢,是你的问题?如果您担心可能拦截该数据的中间人窥探者,那么您应该通过https运行您的连接。

如果你很在意自己看到这个数据的最终用户,我会问,为什么你关心吗?这是用户自己的状态。那里不应该有任何秘密。

如果您担心用户可能操纵简单的事情,他们不应该被允许做您的服务器上的东西,那么你就需要实现服务器的东西用户不应该被允许在保护做。客户无法实施此类保护,因为根据定义,客户在这方面不安全。

如果确实存在该终端用户本身不应该有访问客户端上的安全数据,那么你需要重新考虑如何您应用的工作原理,只保留在服务器上的数据。客户端应该只有绝对需要在客户端上的数据。如果您生成大部分UI服务器端,那么可以在客户端中使用非常少的实际数据来实现UI,除了正在编辑的特定字段。

因此...总之。不要把数据放在最终用户不应该访问的客户端中。如果这是一个问题,请重新考虑您的应用程序的工作原理。如果最终用户可以访问它,那么不要工作。如果没有其他人可以访问它,那么通过https运行你的页面。

至于模糊,这是根本不值得任何努力。混淆不能提供任何真正的安全性,因为它总是可以被击败。充其量,它为试图查看你的代码的人提供了一定程度的烦恼。一个坚定的黑客只需花费一点时间就可以完成混淆,并通过一些工具运行它。当然,在缩小JavaScript代码方面没有任何坏处,因为它使它变得更小,并且使其不易被人读取,但不要将其视为任何形式的真实安全性。

1

混淆只能到目前为止,因为Javascript的本质是它下载到用户的系统,以便他们的浏览器(和用户)可以阅读它。让一些难以阅读的东西不能完全隐藏它。没有给用户一些解密方法,你就无法加密它,从而破坏了目的。你正在寻找的是在用户看到它之前编译的服务器端语言,例如PHP,Python,Java等。

1

不,不是真的。你可以混淆,打包和做各种东西,使源代码难以阅读。地狱,你甚至可以给你的对象真奇怪和indescript属性。但事实上,你只会让阅读变得更难。数据在那里,如果敏感数据发送到客户端,确定的攻击者可以找到他想要的东西。

所以不要存储敏感数据客户端。无论如何,UI状态有什么可怕的秘密?如果用户想要打破他的状态,让他?

1

我不会建议尝试混淆javascript逻辑。
但你可以缩小它(即丑化它)。至少你会让阅读变得更加困难。 如果您担心客户端代码的安全性,那么只能使用服务器端代码。也许通过服务提供更多的代码,然后通过$ .ajax或类似的方式调用你的服务。

1

不,没有。

但是,你有一些选择:

  1. 您可以您的JavaScript - 因为它使得难以阅读和理解你的代码,这会略微有所帮助。那里有很多很好的混淆器。我反对这个建议!
  2. 你可以缩小你的javascript - 这可能看起来像一个混淆方法,但不是。它可以很容易地恢复到可读的JavaScript,主要用于限制带宽。我鼓励这一点,但出于这个原因反对它的建议!
  3. 您可以尝试将尽可能多的敏感数据和代码放到服务器上。这可能是有道理的,或者它可能不是。
  4. 您可以通过您自己的JavaScript解密库对您的数据进行加密并对其进行加密解密。不是一个好主意,因为绕过这个安全性非常容易,而且是资源密集型的。但是,它会稍微阻止数据的“盗窃”。 我强烈建议不要这样!
  5. 如果您可以接受仅针对Google Chrome(现在)或Chromium,则可以在Native Client中实现代码和数据,Native Client基本上是在浏览器(Chromium/Chrome)的沙箱中运行的编译C代码。访问您的代码的唯一方法是反编译。如果你对数据窃取非常偏执,你可以在编译之前混淆你的C代码,试图杀死调试器抢夺你的数据,并且可能实时从你的服务器通过SSL从你的所有数据中获取数据,而不是在二进制文件中。

虽然,请记住,即使使用选项5,也有方法可以声明您的数据,但很少有人有意愿,时间和专业知识来获取它。

还记得,如果您正在寻找一种方法来隐藏网络上的敏感数据,很可能您错误地想出了您的解决方案。永远不要将敏感数据放在客户端上,或使用客户端验证作为唯一的验证。也许网络不是你正在寻找的平台?也许你正在寻找一个分布式解决方案?