在数据到达服务器之前对其进行加密

Encrypting data before it gets to the server

本文关键字:加密 数据 服务器      更新时间:2023-09-26

假设我有一个PHP应用程序,希望在用户数据到达服务器之前对其进行加密(以向用户证明他们的数据不会被挖掘或转售用于广告)。

这里也提出了类似的问题(安全Javascript加密库?),这意味着这不会奏效,但随着nsgt用户隐私兴趣的增加,这一要求只会随着时间的推移而变得越来越高。

例如,使用斯坦福图书馆(http://crypto.stanford.edu/sjcl/)web表单有一个额外的"长"密码字段,用户可以粘贴该字段(例如可能来自电子邮件)

  sjcl.encrypt(txtPassword, txtFormFieldToBeEncrypted)

加密后的数据被发送到PHP页面,当页面被加载时,这个过程被反转。

如果用户使用Chrome或其他记住表单值的浏览器,这会起作用吗?显然这不是一个安全的结果,但这是否足以有效地使用户的信息对主机服务器保密?

编辑:我只想明确一点,我只想让主机服务器看不到这些信息,并且知道这个解决方案无法防止第三方攻击

对页面的保护是无用的,因为加密密钥/机制也将在页面的范围内,因此可以被恶意方(或用户在检查页面时自己)篡改。

为了避免数据在未加密的情况下通过线路,也没有理由"滚动自己的"(tm),因为这需要SSL。

如果您想确保在服务器上接收的数据实际上来自您控制的页面,您可以依靠CSRF保护。

首先使用SSL,它是安全通信的唯一方式。如果您在JavaScript中进行加密,那么解密您的消息是微不足道的(因为所有带有密钥的代码都是公共的)。

如果您担心CFRS攻击,请使用防伪令牌(更多信息请点击此处:http://bkcore.com/blog/code/nocsrf-php-class.html)

完全有可能做到这一点,例如Lastpass在其上建立了他们的商业模型。他们的服务器所做的只是存储一个加密的blob,而他们无法对其进行任何操作,所有的加密和解密都发生在客户端上;包括浏览器中的Javascript实现。加密数据的整个blob被下载到客户端,在那里用户的密码对其进行解密;并且在返回到服务器的途中相反。

所以,如果你的问题是这是否可能:绝对可能。这也是一项艰巨的工作,因为您需要为想要支持的平台提供相同的en-/解密代码。您还需要保护代码运行的每个上下文,以防止第三方注入允许他们访问客户端解密数据的代码。因此,一切都需要通过SSL,不允许注入第三方内容。

以下是浏览器中javascript加密几乎总是一个坏主意的原因。

你需要深入思考你的信任模式。用户信任服务器吗?如果没有,那么就没有希望使用可信的javascript加密,因为加密软件本身来自服务器。如果用户确实信任服务器,为什么数据需要在客户端加密?只需使用SSL来保护连接,然后让服务器在存储数据之前对其进行加密。