在数据到达服务器之前加密数据

时间:2013-06-25 12:48:36

标签: php javascript security browser encryption

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

这里提出了类似的问题(Secure Javascript encryption library?)并暗示这不会起作用,但随着隐私权益的增加,amonsgt用户的这一要求只会随着时间的推移而变得更大。

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

  sjcl.encrypt(txtPassword, txtFormFieldToBeEncrypted)

加密数据被发送到PHP页面,加载页面时反向过程。

如果用户使用Chrome或其他能够记住表单值的浏览器,这是否有用 - 显然这不是一个安全的结果,但这是否足以使用户信息保持对主机服务器的隐私?

编辑:为了清楚起见,我只对使主机服务器看不到信息感兴趣,并了解此解决方案不会受到第三方攻击的保护

4 个答案:

答案 0 :(得分:1)

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

为了避免数据超过未加密的线路,也没有理由“推出自己的”(tm),因为这样就有SSL。

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

答案 1 :(得分:1)

首先使用SSL,它是安全通信的唯一途径。如果您使用JavaScript进行加密,则解密您的邮件是微不足道的(因为所有带密钥的代码都是公开的)。

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

答案 2 :(得分:1)

Here是一系列原因,为什么浏览器中的javascript加密几乎总是一个坏主意。

您需要深入思考您的信任模型。用户是否信任服务器?如果没有,因为加密软件本身来自服务器,所以对于值得信赖的javascript加密没有希望。如果用户信任服务器,为什么数据需要在客户端加密?只需使用SSL来保护连接,然后让服务器在存储之前加密数据。

答案 3 :(得分:1)

完全可以这样做,Lastpass例如在其上构建了他们的商业模式。他们所有的服务器都存储了一个他们无法做任何事情的加密blob,所有加密和解密都在客户端上进行;包括浏览器中的Javascript实现。整个加密数据块被下载到客户端,用户的密码将其解密;反之在返回服务器的路上。

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