【发布时间】:2011-08-09 03:22:03
【问题描述】:
我正在建立一个网站,我的付款方式将是 Google Checkout 和 Paypal。会有链接/按钮将用户重定向到安全的 Google/Paypal 网站以处理付款。这意味着我不需要每年 150 美元的额外费用和为我的网站安装 SSL 证书的复杂性。
但是我想在用户登录时加密用户的密码,这样如果他们在网络上,一些运行 FireSheep 等的恶意人员在发送到服务器时无法读取用户的实际密码。网站的其余部分不需要加密,因为它不是真正的敏感数据,可能会显着降低用户体验。
我的想法是这可以通过公钥加密来实现。假设这个过程是这样的:
- 公钥在 JavaScript 外部文件中,私钥在服务器上的 PHP 中
- 用户在表单中输入他们的用户名和密码并点击提交
- JavaScript 运行并加密密码,并将其存储回文本字段中
- 表单提交到服务器,密码用PHP解密
- PHP 中的纯文本密码经过加盐和哈希处理,然后与数据库中的哈希值进行比较。
- 注册/更改密码功能可能类似的过程。
我认为像 RSA 这样的东西可以解决问题。但是我在网上搜寻了一个可以工作的 JavaScript 库来做这件事,但似乎没有一个与可用的 PHP 库兼容。无论如何,它需要生成一组与 JavaScript 和 PHP 兼容的密钥。
有人知道这个的实际工作解决方案吗?如果不是,我们写一个怎么样,然后开源它。不幸的是,编写加密/解密代码非常复杂,所以我真的不知道现有库在做什么以及如何修改它们以使其工作。我已经对会话固定/劫持提供了保护,所以我对此不感兴趣。只是想在数据到达网络服务器之前对其进行加密。
注意:请不要发布一堆指向独立 Javascript 或 PHP 加密库的链接,我已经在 Google 上找到了这些链接。这实际上没有用。我需要的是用于 JavaScript 加密和 PHP 解密的代码,它们实际上可以和谐地协同工作以产生上述预期结果。
另外,如果您可以避免发布“只使用 SSL”之类的 cmets。我实际上想要一个解决这个确切问题的方法,即使它不是最佳实践,它仍然很有趣。
非常感谢!
【问题讨论】:
-
我的建议是接受它并支付 150 美元。如果您正在处理付款,则用户将希望使用 SSL,并且当您实施安全系统时(如果您确实这样做了),无论您支付多少,您很可能会花掉超过 150 美元/按小时付费。
-
这绝不会阻止攻击。如果我可以嗅探并伪造明文密码,我就可以嗅探并伪造加密密码。加密文本成为密码。
-
Michael 是绝对正确的,我自己考虑过这种方法,然后意识到它的不足之处。
-
@Nick Jeffrey 提供了解决方案below,我已经成功实施了。
-
@aubreyrhodes 有许多支付提供商,如 PayPal,甚至大多数商家设施,都允许您将信用卡和其他支付数据的安全处理工作卸载到他们的 HTTPS 站点上。用户访问您的网站,将他们想要的商品添加到购物车,然后被重定向到使用 HTTPS 的安全支付网站。攻击者没有有用的数据。除非您想要一个完整的集成购物车和支付体验,用户永远不会离开您的网站,否则无需花费 SSL 证书。这也会让您承担一些责任。
标签: php javascript encryption ssl public-key-encryption