加密Ajax数据的最佳和最安全的方法是什么?

时间:2011-07-23 21:58:25

标签: php javascript jquery ajax security

我正在开发一个网站,人们可以通过Ajax(由jQuery提供支持)注册和访问不同的数据。这很简单,我也没有问题。问题是Ajax显示的数据需要是安全的,不能通过远程脚本解析。我可以通过AES(在PHP中)加密数据并在javascript中成功解密,但javascript代码将始终对所有人可见(登录后)。我可以使用混淆器和javascript加密,但这两种方式,即使是混合,也不够安全和可解密。我宁愿避免SSL连接,因为我试图阻止注册用户访问信息,SSL连接只会阻止未注册的用户访问数据。

注册用户将能够赚钱,因此非常有兴趣欺骗代码,这就是为什么它必须是防弹的。

不幸的是,系统肯定需要Ajax(整个工作原理需要基于Ajax)。理想的解决方案是将加密密钥保存在可以通过php保存并通过javascript访问的位置,而不是用户,远程脚本解析器等。

有没有人知道为此目的创建安全Ajax连接的方法?

我真的很感谢你的帮助。

4 个答案:

答案 0 :(得分:6)

你想要一些浏览器不能做的事情。

您已要求:"The ideal solution would be a way to save the encryption key on a place that can be saved by php and accessed by javascript, but not by users, remote script parsers etc."

浏览器中的Web浏览器和javascript引擎的设计使得Web浏览器可以执行的任何Javascript都可以被想要查看它,窃取它,借用它的人看到。期。没有这样的地方可以通过Javascript访问,但不能由用户或远程脚本解析器访问。如果这是一个问题,您将不得不重新考虑您的应用程序的工作方式。最有可能的是,您需要将秘密内容保留在服务器上,并在服务器上执行更多工作,减少客户端上的工作,以保护您想要保护的内容。如果您考虑一下,浏览器只是一个远程脚本解析器,因此如果您阻止远程脚本解析,则会阻止浏览器。如果您允许浏览器,则允许使用远程脚本解析器。

如果您愿意,可以将您的Javascript混淆为您的内容。这将使人们更多地了解并做一些有用的事情,但这只会是一个额外的障碍,任何坚定和称职的人如果真的想要打败他们就会失败。如果这种保密对您来说非常重要,那么您需要重新考虑应用程序的设计,以便浏览器不需要秘密信息,浏览器就可以作为显示和交互引擎。

我在这里很清楚。根据定义,浏览器可以执行的任何代码都必须是任何用户或任何工具可以下载和检查的内容。您可以使用SSL来保护数据免受传输中的窥探者的攻击,但最终必须可以作为Javascript读取,以便浏览器能够执行它。

答案 1 :(得分:1)

你无法做到你想要的。这就像一个防欺诈的游戏设计。你可以让它更难,甚至更难,但不是100%安全。你必须从不同的方法解决问题,比如,无论是什么,检查服务器端的动作(例如以有状态的方式)并尝试检测任何非人类行为。但这只是一个人创造一个模仿人类行为的现实机器人的问题。加密用于防止第三方(服务器和客户端除外)窃听/捕获数据,而不是客户端。我不是说放弃整个事情,而是尝试不同的方法来保护系统。我想提供更多帮助,但不知道你到底想要达到的目的。

答案 2 :(得分:-1)

身份验证是唯一的方法。

让您的用户进行身份验证(登录)并向他们发送您用于加密数据的随机种子和盐。

如果没有种子/盐,即使恶意用户可以解密您的数据,它仍然是垃圾。

如果您希望javascript使用一段数据,那么客户端就会使用该数据。

如果您不希望重新使用数据,请设置一个服务器端系统,其中每个数据块只有一次有效。

正确的身份验证应解决所有这些问题。

  

我希望用户只有在Ajax显示数据时才能看到数据

然后在ajax得到它而不是之前加载数据。或者只是部分加载数据并将任何敏感工作卸载到服务器。

答案 3 :(得分:-2)

我认为最佳做法是使您的代码(生产代码)过于复杂,无法读取和编辑 你应该用字母[a-z]重命名你的所有变量你不应该声明ny函数总是在另一个函数中使用function(){}以使它更符合逻辑这种方式 客户端仍然可以看到代码,但与它无关 编辑:我现在意识到这是一个糟糕的建议