
Apache 인증을 사용하여 보호하려는 웹 애플리케이션이 있습니다. 비밀번호를 저장하기 위해 sha1+salt를 사용한다는 것을 알았습니다. auth_mysql_module
더 이상 사용되지 않으므로 authn_dbd_module
. 현재 저는 debian wheezy를 실행하고 있습니다. 웹앱이 비밀번호 해시를 생성하는 방법은 다음과 같습니다.
<?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-log:
[Sat Aug 22 XX:XX:XX 2015] [error] [client 92.X.X.X] user myusername: authentication failure for "/": Password Mismatch
비밀번호를 저장하기 위해 sha1이나 짧은 솔트를 사용하는 것은 권장되지 않는다는 것을 알고 있습니다. 하지만 어쨌든 인증이 작동하도록 하는 방법이 있나요?