我有一个 Web 应用程序,我想使用 apache 身份验证来保护它。我发现它使用 sha1+salt 来存储密码。由于auth_mysql_module
已弃用,我尝试使用authn_dbd_module
。目前我正在运行 debian wheezy。以下是 Web 应用程序创建密码哈希的方式:
<?php sha1($pw.$salt); ?>
尝试使用 php:
sha1('password'.'salt')
c88e9c67041a74e0357befdff93f87dde0904214
我可以使用 mysql 重现哈希:
SELECT SHA1(CONCAT(@pw, @salt));
尝试使用mysql:
mysql> SELECT SHA1(CONCAT('password', 'salt'));
+------------------------------------------+
| SHA1(CONCAT('password', 'salt')) |
+------------------------------------------+
| c88e9c67041a74e0357befdff93f87dde0904214 |
+------------------------------------------+
我的apache site.conf
:
DBDriver mysql
DBDParams "host=localhost user=<db_user> pass=<db_pass> dbname=<db_name>"
<Directory /var/www/htdocs/>
Options -Indexes
Order allow,deny
Allow from all
AuthName "Please enter username and password"
Authtype Basic
require valid-user
AuthBasicProvider dbd
AuthDBDUserPWQuery "SELECT SHA1(CONCAT(password, salt)) AS password FROM users WHERE username = %s"
</Directory>
这AuthDBDUserPWQuery
行代码显然没有起到作用,因为它会从(存储的哈希值和盐值)创建一个新的哈希值并将其与输入的密码进行比较。Apache 日志:
[Sat Aug 22 XX:XX:XX 2015] [error] [client 92.X.X.X] user myusername: authentication failure for "/": Password Mismatch
我知道不建议使用 sha1 或短盐来存储密码。但无论如何:有没有办法让身份验证成功?