在数据到达服务器之前对其进行加密
Encrypting data before it gets to the server
假设我有一个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来保护连接,然后让服务器在存储数据之前对其进行加密。
- 如何在网络密码API中使用私钥对数据进行加密
- 使用javascript和get以加密形式传递数据
- 如何在传递到aspx页面之前加密数据
- 发送前加密邮件数据
- 用于散列有效负载发布数据的最佳加密货币
- Chrome扩展程序 - 加密要存储在Chrome存储中的数据
- 加密一组数据以馈送图表的优化方法
- JSON 数据加密/解密或密钥值对
- 如何使用电子令牌在客户端加密数据
- 在JS和C#之间共享加密数据,用于虚拟对象
- 用“加密”在Javascript中加密数据;RSACryptoServiceProvider”;公钥->超出最大异
- 在POST中加密数据
- 在服务器端加密数据,在客户端解密数据
- 用ruby加密数据,用node解密
- 无法使用jsbn在Javascript中正确加密数据
- 加密数据在客户端通过html5 javascript
- 从javascript应用程序发送和接收加密数据
- 使用JS加密数据并在表单中解密PHP
- Javascript -用密码加密数据的最佳方式
- 在Javascript中加密数据