
Eu tenho um aplicativo da web que desejo proteger usando a autenticação Apache. Descobri que ele usa sha1+salt para armazenar senhas. Como auth_mysql_module
está obsoleto, tento usar o authn_dbd_module
. Atualmente estou executando o debian wheezy. Veja como o aplicativo da web cria hashes de senha:
<?php sha1($pw.$salt); ?>
tente com php:
sha1('password'.'salt')
c88e9c67041a74e0357befdff93f87dde0904214
Posso reproduzir o hash usando mysql:
SELECT SHA1(CONCAT(@pw, @salt));
tente usar mysql:
mysql> SELECT SHA1(CONCAT('password', 'salt'));
+------------------------------------------+
| SHA1(CONCAT('password', 'salt')) |
+------------------------------------------+
| c88e9c67041a74e0357befdff93f87dde0904214 |
+------------------------------------------+
Meu 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>
A AuthDBDUserPWQuery
linha obviamente não funciona porque cria um novo hash a partir de (hash e salt armazenados) e o compara com a senha inserida. E log do Apache:
[Sat Aug 22 XX:XX:XX 2015] [error] [client 92.X.X.X] user myusername: authentication failure for "/": Password Mismatch
Eu sei que não é recomendado usar sha1 nem short salt para armazenar senhas. Mas de qualquer forma: existe uma maneira de fazer a autenticação funcionar?