1

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

此处提出了类似的问题(安全 Javascript 加密库?),并暗示这不会起作用,但随着 amonsgt 用户对隐私兴趣的增加,这个要求只会随着时间的推移而变得更大。

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

  sjcl.encrypt(txtPassword, txtFormFieldToBeEncrypted)

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

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

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

4

4 回答 4

1

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

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

于 2013-06-25T12:55:48.493 回答
1

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

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

于 2013-06-25T12:55:57.590 回答
1

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

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

于 2013-06-25T13:24:47.187 回答
1

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

为了避免数据通过未加密的线路,也没有理由“自己动手”(tm),因为有 SSL。

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

于 2013-06-25T12:55:27.700 回答