PHP安全登录 - 客户端选项?

时间:2009-07-23 00:28:47

标签: php javascript security authentication codeigniter

好的,现在我很困惑。我从SO用户那里获得了有关库的建议,以便与codeigniter一起使用进行身份验证。我已经探索了dx_auth和simpleloginsecure(我想我将使用后者,因为它假设安全散列和小占用空间)。

但是,在客户端散列密码怎么样?我在图书馆的文件中没有看到任何提及。无论这些库有多安全,是否需要一些客户端加密(js),以便密码永远不会以纯文本形式发布?或者我错过了一些东西,这些库以某种方式覆盖了这个......

由于

更新:以下几个答案建议使用SSL。但是,我的印象是这些php(codeigniter插件)库代替了SSL(我在这里完全错了)?如果我弄错了,有没有一种安全的方法可以在没有SSL的情况下实现这一目标? (过去我在发布密码之前使用了javascript md5哈希函数来加密密码......但我希望有更安全的东西)。

更新2 好的 - 所以似乎共识是我应该使用SSL。如果是这种情况,那么执行各种散列的所有那些花哨的php身份验证库的重点是什么。如果SSL负责从客户端到服务器的加密,那么使用这些库(dx_auth等除了可能添加角色功能之外)是什么意思?是否只是为了确保在服务器/数据库上安全存储数据? (我会比较我正在处理的项目数据的敏感程度与stackoverflow ..没有信用卡或任何过于敏感的信息,只是用户名,密码等。)

5 个答案:

答案 0 :(得分:1)

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

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

JS加密实际上可能会降低您的系统安全性,因为它会暴露您的散列算法。

<强>更新

散列密码并不能防止它在客户端和服务器之间被窥探,而是意味着如果有人攻击您的网站,或者无论如何都能访问您的数据库,所有密码都无法以纯文本形式查看。这一点尤其重要,因为许多人对多个站点使用相同的密码。

答案 1 :(得分:1)

在不知道关于CodeIgniter的单个点的情况下,我认为你的选择是:

  1. 让JavaScript跳转并在提交密码之前对其进行哈希处理。这甚至可能吗?

  2. 使用SSL连接。

  3. 另外,你必须考虑你传输的内容。除非它是危及生命的敏感信息,否则问问自己 - 这是否真的需要进行传输以进行传输?

    最后,如果某人的PC上有键盘记录程序或其他恶意软件,则无论如何都会使客户端散列无意义。

    散列敏感信息的重点是,如果存储该信息的数据库受到损害,则不会造成重大损害 - 因为攻击者不会立即获得有用的信息。

答案 2 :(得分:1)

在客户端隐藏密码毫无意义,因为对您网站的所有请求仍然容易受到重播攻击。能够查看流量的攻击者会在请求中看到用户名和哈希密码 - 这可能很容易被重放,攻击者会假设提交请求的用户的身份被嗅探。

启用SSL是您的最佳选择,因为以纯文本格式提交的值会自动加密,无法进行嗅探。此外,您的用户可以相信数据来自有效的来源。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

让浏览器和服务器为您处理所有密码加密。为此,请确保您使用的是安全连接(协议将为https,例如https://www.example.com。您需要设置服务器以接受安全连接 - 尝试google一些提示。