2009-07-23 134 views
0

好了,现在我很困惑。我一直从库用户的SO用户那里获得建议,以便与codeigniter进行认证。我已经探索了dx_auth和simpleloginsecure(我认为我会使用后者,因为它的安全哈希和小占用空间)。PHP安全登录 - 客户端选项?

但是,如何在客户端哈希密码?我在图书馆的文件中没有看到任何提及。不管这些库有多安全,是否需要进行一些客户端加密(js)以便密码永远不会以纯文本形式发布?还是我失去了一些东西,这些库在某种程度上确实涉及这个......

感谢

更新:下面几个答案建议SSL。不过,我的印象是这些php(codeigniter插件)库取代了SSL(我完全误解了)?如果我误解了,有没有一种安全的方式来完成这个没有SSL? (在过去,我已经使用JavaScript md5哈希函数在发布密码之前加密密码......但我希望有更安全的东西)。

更新2好的 - 所以似乎共识是我应该使用SSL。如果是这种情况,那么所有那些花哨的PHP认证库都会执行各种散列。如果SSL负责从客户端到服务器的加密,那么使用这些库(dx_auth等,除了可能添加角色功能)还有什么意义?仅仅是为了确保数据在服务器/数据库上的安全存储? (我会比较我正在使用的项目上的数据的敏感性水平与没有信用卡或任何过于敏感,只是用户名,密码等的项目上的数据的敏感性水平)

回答

1

要加密客户端数据,你需要ssl。

基本上ssl会在每个会话开始时向浏览器发送加密密钥,然后使用加密后变量等,并在服务器的另一端再次解密。

JS加密实际上可能会使您的系统不太安全,因为它会暴露您的哈希算法。

UPDATE:

散列密码不保护它从客户端和服务器之间被窃听,而是意味着如果有人黑客网站,或获得访问你的数据库中,无论如何,所有的的密码不能以纯文本形式查看。这一点特别重要,因为许多人在多个站点使用相同的密码。

1

,无需了解CodeIgniter的一个点,我觉得你的选择是:

  1. 有JavaScript的跳,并在提交前散列密码。这甚至有可能吗?

  2. 使用SSL连接。

此外,你必须考虑你的传输。除非它是危及生命的敏感信息,否则问问自己 - 这是否真的需要散播传输?

最后,如果有人在他们的PC上有键盘记录器或其他恶意软件,它会使你的客户端散列毫无意义。

散列敏感信息的一点是,这样如果其中的信息被存储在数据库遭到破坏,则没有大的伤害已经造成 - 因为攻击者不会有立即有用的信息。

0

没有优势,在客户端进行加密。如果您不使用SSL,则无论如何都可以拦截数据。所以,即使你用say md5散列密码,md5散列仍然以纯文本形式发送,然后被拦截,然后可以由第三方回发到登录页面。当然,他们可能不知道原始密码,但他们仍然可以访问。如果您担心安全问题,请提供自签名证书,或者向RapidSSL经销商支付10美元的可信证书。

+0

呃......马克,具有散不允许,除非你允许的话,我不会建议别人来访问你的网站。 – 2009-07-23 00:52:15

0

让浏览器和服务器处理所有的密码加密为您服务。要做到这一点,请确保您使用的是安全连接(该协议随后将是https,如https://www.example.com您将需要设置你的服务器接受安全连接 - 尝试google一些技巧

1

哈希只是该密码。在客户端是毫无意义的,因为对网站的所有请求仍然容易受到重播攻击的影响,能够查看通信量的攻击者将在请求中看到用户名和密码 - 可以轻松地重播,并且攻击者会假设身份谁提出这是嗅了嗅请求的用户的。

启用SSL是最好的选择,因为那时提交以纯文本值自动加密,并不能SN iffed。另外,您的用户可以相信数据来自有效的来源。

还有其他选择,但是。如果您不想使用SSL,您也可以使用challenge-response身份验证方案,但这也有一些缺点。这真的取决于你在网站上做什么。