存储网站密码盐的最佳位置在哪里?

时间:2011-02-17 17:26:54

标签: php security passwords storage salt

我有两个盐,每个用户都有一个唯一的盐,它与数据库中的用户信息一起存储。第二种盐是网站特有的盐。两者都需要哈希密码。

问题是我不知道我应该在哪里保持我的网站盐。现在它驻留在运行散列算法的PHP方法中。我应该将它保存在/ var / www /之外的文件中并打开PHP并读取文件吗?我不想将它存储在数据库中,因为如果我的数据库受到损害,那将会破坏两种盐的目的。

有什么建议吗?

5 个答案:

答案 0 :(得分:11)

还没有提到一个选项?服务器提供的环境变量。您可以在httpd.conf或.htaccess中执行此操作。由于Apache不提供.htaccess文件,因此您无需担心将其隐藏起来......

SetEnv WEBSITE_SALT 232lhsdfjaweufha32i4fv4239tauvkjn

这样,您在应用程序中需要做的就是$salt = getenv('WEBSITE_SALT');。这里的好处是它对应用程序是透明的......

答案 1 :(得分:5)

是的,将它保存在某个PHP配置文件中,最好放在Web根目录上的文件夹中。

答案 2 :(得分:0)

将网站盐存储在永远无法提供的文件中是您的最佳选择。正如你所指出的那样,加密盐或与其他盐保持一致是没有意义的。只要确保您存储的文件无法在请求时(在根www工作之外)提供,并确保它具有适当的权限设置。

答案 3 :(得分:0)

只需将其粘贴在.php文件中的变量中即可。对于一点点隐藏的安全性,您可以将其存储为(比如)base64编码格式,并将变量命名为完全无害的,例如

$this_is_not_the_salt_you_are_looking_for = base64_decode(.... encoded salt string here ...);

为了获得额外的安全性,请将.php文件放在webroot之外的某处,这样如果由于某种原因web服务器的配置开始提供原始PHP代码,那么包含salt信息的文件就不会可以直接访问。

答案 4 :(得分:-3)

大多数人会在配置文件中存储一个恒定的salt。这很好,但使用SALT的重点是确保外部数据源无法读取您的数据。

我见过很多人实际上将盐存储在帐户字段的数据库中。这是扭曲。它是在创建帐户时唯一生成的,因此每个用户都有一个独特的盐。

这不是关于盐的问题 - 而是关于你如何加密数据。

sha1($password.md5(md5($password.md5($salt))))

即使加入盐,你也可能永远无法解决这个问题。因此,如果您决定为每个帐户设置唯一身份,请不要担心将其存储在数据库中。只需确保您的加密过程强大!