2010-11-16 152 views
0

我在使用simple login class作为起点构建CodeIgniter应用程序的登录部分。这一切工作正常,但我不确定加密类型和使用哪种加密类型之间的差异。安全登录PHP CodeIgniter

我已经使用用户的密码的crypt()函数作为盐(通过MD5),像这样:

$pass == crypt($_POST['login_password'], md5($_POST['login_password']))

是这种方法确定,还是有一个明显的错误在这种方法?这看起来很安全,因为密码或salt都不存储在数据库中。或者有点显而易见?

在此先感谢。

+0

可能想修复您的链接;) – 2010-11-16 20:26:52

回答

3

http://php.net/manual/en/faq.passwords.php

这是实现密码的正确方法。

下面的一切都是无关紧要的。


你所拥有的权利有什么,一个简单的

$pass = md5($_POST['login_password'] . "somerandomchars"); 

除非需要很高的安全度在大多数情况下就足够了。

如果您使用CodeIgniter,我强烈建议您查看TankAuth身份验证插件。

+0

Hi @castis!感谢您的回答。我刚开始时只使用了md5散列,但在印象中,应该使用盐来防止使用彩虹表?感谢您的链接,看起来不错,我会检查出来。 – Robimp 2010-11-16 17:07:27

+0

是的,你应该使用盐来保护密码。看看这个其他SO条目。 http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords – castis 2010-11-16 17:08:53

+0

啊,看起来像一个非常彻底的线程。谢谢,在路上的绿色刻度... – Robimp 2010-11-16 17:12:24

1

在现代应用中,网站密码不是使用crypt存储的。对salt使用散列值要安全得多(如果有人闯入你的数据库,那里没有密码,只有密码的散列是他们不能用来登录的),并且crypt确实不是很安全。不幸的是MD5也有问题,所以我建议使用SHA512作为散列。

3

还有codeigniter提供的内置加密库。你在你的配置(应用程序/配置/ config.php文件)$配置[ 'encryption_key']

即使它可以被 “解密” 提供的 “盐”,它是相当安全的:

$this->load->library('encrypt'); 
//encryption 
$pass = $this->encrypt->encode($this->input->post('login_password')); 
+0

我不知道,这看起来像一个不错的选择。 – Robimp 2010-11-16 17:18:24

+3

这里唯一的问题是,如果你担心安全问题,如果有人进入你的系统足够远以查看数据库记录。有机会他们也可以找到一个加密密钥,在这一点上:所有这些密码都可以通过CI的加密库​​轻松实现。始终哈希密码,从不加密它们。 – castis 2010-11-16 17:20:45

+2

加密是无意义的,因为它可以被解密。 MD5哈希至少必须被破解,但使用盐,甚至可能使sha1变得更安全。 – 2010-11-19 09:36:21

1

使用$pass = do_hash($this->input->post('password')); 并在您的autoload.php中包含security_helper