如何使用密码中的盐来设置 Apache HTTP 授权?

如何使用密码中的盐来设置 Apache HTTP 授权?

我在用着mod_auth_mysql使用 Apache 2 和 MySQL 5 进行 Apache 授权。目前我们的密码以明文形式存储在数据库中。作为一项新要求,我们必须使用 salt 存储它们,以抵御彩虹表攻击。文档指出:

AuthMySQLSaltField <> | <string> | mysql_column_name

 Contains information on the salt field to be used for crypt and aes
 encryption methods.  It can contain one of the following:
   <>: password itself is the salt field (use with crypt() only)
   <string>: "string" as the salt field
   mysql_column_name: the salt is take from the mysql_column_name field in the
     same row as the password

 This field is required for aes encryption, optional for crypt encryption.
 It is ignored for all other encryption types.

因此,模块似乎可以做到这一点,但我找不到有关如何做到这一点的任何信息?我应该在密码栏中输入什么?我应该在盐中输入什么?我如何使用 AES?(大多数应用程序将使用 PHP 来创建用户)

答案1

这取决于你的盐是什么!

一般来说,您可能会使用用户无法更改的内容(例如他们的 ID)作为盐;如果是这种情况,请指定包含用户 ID 的列。

如果您使用常量盐,请将其括在<>标记中。

答案2

盐值应为随机字符串,而不是 md5/sha1/256。您提供的文档要求盐值位于其自己的列中。因此,您“需要”3 列用于身份验证

Usersname/email = user submitted
passwordhash = hash(password, passwordsalt)
passwordsalt = random string

您可以轻松使用这些列来验证密码并使用盐和哈希创建新的用户记录。

永远不要存储纯文本密码。

至于 hash() 函数,看一下php密码库。当 wordpress 最终在其数据库中实现加盐哈希时,他们就转向使用它。

相关内容