繁体   English   中英

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

[英]What is the best and most secure way to encrypt Ajax data?

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

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

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

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

非常感谢您的帮助。

您需要浏览器无法做到的事情。

您已经问过: "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。 期。 没有Java可以访问的地方,但是用户或远程脚本解析器不能访问。 如果出现问题,您将不得不重新考虑应用程序的工作方式。 最有可能的是,您需要将机密内容保存在服务器上,并在服务器上进行更多工作,而在客户端上进行较少工作,以保护您想要保护的内容。 如果考虑到这一点,浏览器只是一个远程脚本解析器,因此如果您阻止远程脚本解析,就可以阻止浏览器。 如果允许浏览器,则允许远程脚本解析器。

如果需要,您可以根据自己的意愿来混淆Javascript。 这将使人类对它的理解和使用它做更多的工作,但这只会是任何坚决而有能力的人如果真的愿意击败的又一个障碍。 如果这种保密对您真的很重要,那么您需要重新考虑应用程序的设计,以便浏览器中不需要秘密信息,并且浏览器仅用作显示和交互引擎。

只是我在这里很清楚。 根据定义,浏览器可以执行的任何代码都必须是任何用户或任何工具都可以下载和检查的代码。 您可以使用SSL保护数据免受传输中的窥探者的侵害,但最终它必须像Javascript一样可读,浏览器才能执行它。

您不能完全按照自己的意愿做。 这就像一个防作弊的游戏设计。 您可以使其更加困难,甚至更加困难,但并非100%安全。 您必须采用不同的方法来解决问题,例如,无论采用哪种方法,都要在服务器端检查操作(例如,以有状态的方式),并尝试检测任何非人为的行为。 但这只是某个人创造的模拟机器人模仿人类行为的问题。 加密用于防止第三方(服务器和客户端除外)窃听/捕获数据,而不是客户端。 我并不是说要放弃整个事情,而是尝试使用另一种方法来保护系统。 我想提供更多帮助,但不知道您到底想达到什么目标。

身份验证是唯一的方法。

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

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

如果您希望javascript使用一条数据,则客户端将使用该数据。

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

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

我希望用户仅在Ajax显示它们时才能看到数据

然后在ajax得到它而不是之前时加载数据。 或仅部分加载数据并将所有敏感工作卸载到服务器。

我认为最好的做法是使您的代码(生产代码)过于复杂以至于无法阅读和编辑,您应该使用字母[az]重命名所有变量,而不应该声明ny函数始终在另一个function(){}内部使用function(){}这样,逻辑上更加复杂,客户端仍然可以看到代码,但与代码无关。编辑:我意识到这是一个糟糕的建议

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM