Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对低敏感度用户账户双重Salt认证的意见?_Php_Codeigniter_Authentication_Ion Auth - Fatal编程技术网

Php 对低敏感度用户账户双重Salt认证的意见?

Php 对低敏感度用户账户双重Salt认证的意见?,php,codeigniter,authentication,ion-auth,Php,Codeigniter,Authentication,Ion Auth,我目前正在从事一个需要用户帐户的web项目。应用程序位于服务器端,因此我使用它作为身份验证库 我以前写过一个身份验证系统,在那里我使用了两种盐来保护密码。一个是服务器范围的salt,它作为环境变量存在于.htaccess文件中,另一个是在用户注册时随机生成的salt 这是我在该身份验证系统中用于散列密码的方法: $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; //create a

我目前正在从事一个需要用户帐户的web项目。应用程序位于服务器端,因此我使用它作为身份验证库

我以前写过一个身份验证系统,在那里我使用了两种盐来保护密码。一个是服务器范围的salt,它作为环境变量存在于.htaccess文件中,另一个是在用户注册时随机生成的salt

这是我在该身份验证系统中用于散列密码的方法:

    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    //create a random string to be used as the random salt for the password hash
    $size = strlen($chars);
    for($i = 0; $i < 22; $i++) {
        $str .= $chars[rand(0, $size - 1)];
    }

    //create the random salt to be used for the crypt
    $r_blowfish_salt = "$2a$12$" . $str . "$";

    //grab the website salt
    $salt = getenv('WEBSITE_SALT');

    //combine the website salt, and the password
    $password_to_hash = $pwd . $salt;

    //crypt the password string using blowfish
    $password = crypt($password_to_hash, $r_blowfish_salt);
$chars=“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzo123456789”;
//创建一个随机字符串,用作密码哈希的随机盐
$size=strlen($chars);
对于($i=0;$i<22;$i++){
$str.=$chars[rand(0,$size-1)];
}
//创建用于地下室的随机盐
$r_河豚_盐=“$2a$12$”$str。"$";
//抓取网站上的盐
$salt=getenv(“网站_salt”);
//将网站和密码组合在一起
$password\u to\u hash=$pwd$盐;
//使用blowfish对密码字符串进行加密
$password=crypt($password\u to\u hash,$r\u河豚\u salt);
我不知道这里面是否有漏洞,但不管怎样,我转到了Ion Auth,以获得一套更完整的函数来与CI一起使用

我注意到Ion只使用一种盐作为其散列机制的一部分(尽管建议设置加密密钥以保护数据库会话)

我的数据库中存储的信息包括姓名、电子邮件地址、国家/地区、一些注释(建议不要包含敏感信息)以及指向Facebook、Twitter或Flickr帐户的链接。基于此,我不认为我有必要在我的站点的安全页面上建立SSL连接

我的问题是,为什么只有一种盐被用作Ion Auth库的一部分,有什么特别的原因吗?这是否意味着我在它提供的功能前面编写了自己的附加salt,或者我遗漏了什么


此外,是否值得使用2个salt,或者一旦攻击者拥有随机salt和哈希密码,是否所有的赌注都被取消了?(我认为不是,但如果我什么都不担心的话,值得检查一下…

有人可能会找到注入代码的方法,或者您错误地将目录打开以供查看,或者有人发现注入黑客并可以看到系统salt文件或用户数据,这并不是使用双盐的理由。若出现上述任何一种情况,实际上,您需要担心的不仅仅是用户加密密码的列表

综上所述,双盐解决方案确实更加安全,特别是如果有可能其他人(而不是您)在代码中看到系统盐的话。想一想一个可能是承包商或同事离开的情况。如果他们知道盐和使用的盐模式/算法,他们可以创建彩虹表,并将其用于您的站点。将第二个随机盐添加到用户记录中,可以防止出现这种情况


这一切都是关于权衡你的安全保障的价值与某人为获得你的安全保障所需付出的合理努力的数量。此外,完全不使用盐或根本不加密而完全不疏忽,这比存储我们基本数据的许多其他不太安全的地方要好得多。如果没有信用信息,医疗记录,社会保险。数字,仅仅是普通的用户信息(电子邮件、地址等),而且你没有计划输入这些数据,一份盐可能就足够了。如果你现在不能百分之百确定地做出判断,那就错在更安全的选项上。

这是因为Ion\u Auth使用bcrypt,所以你通常不需要做更多的事情

此外,您可以配置“random_rounds”,这有点像配置中的随机盐渍(在一定程度上)


编辑:您可以查看有关bcrypt和其他类型加密的更多详细信息

为什么不使用tank auth?除了在尝试Tank Auth之前开始使用Ion Auth之外,没有其他特殊原因。坦克里有什么东西被认为比离子更好吗?我想这取决于偏好。这个问题的更好答案可以在这里找到:谢谢你的链接。因此,如果我理解正确的话,bcrypt是安全的,因为它的加密很大一部分来自明文密码本身,类似于使用另一个随机salt,它可以在内部复制,但外部从未真正知道,并且随机循环迭代调用内部密钥派生例程的次数?(基本上只是试图完全理解为什么bcrypt和我上面的方法一样安全)这个链接应该有助于解释更多:谢谢。我想我现在明白了。查看上面的链接和其他SO线程,如果我使用标准的BCrypt类(即与ion_auth捆绑的类),我应该能够在数据库中存储密码哈希,而无需对ion附带的注册或登录函数进行任何修改,不必担心彩虹桌攻击之类的事情,我就是这么想的。如果有人访问了我的数据库,我就要担心更大的问题了!我喜欢在这些事情上犯谨慎的错误。当我连接到一个不使用SSL的网站时,即使我知道我提供给他们的个人信息并不比我的电子邮件地址和随机密码更重要,我喜欢认为他们至少考虑了一点来确保信息的安全。