mysql ile apache uyumlu şifre oluştur
Şu anda eski bir web sunucusunu taşıma sürecindeyim.
Eski sunucu, bir mysql tablosunda depolanan ve mod_auth_mysql
etkinleştirilen kullanıcılarla temel kimlik doğrulama kullanır .
Apaches ile depolanan şifre ist sha1 işlevinde inşa SELECT sha1('secret')
için çalışıyormod_auth_mysql
Maalesef mod_auth_mysql
artık desteklenmiyor. Bu yüzden mod_authn_dbd
alternatif buldum .
https://documentation.help/httpd-2.4-es/mod_authn_dbd.html
Temel kimlik doğrulama ve sabit bir parola ile giriş yapabileceğim noktaya kadar her şeyi çalışır durumda tutmayı başardım
<Location />
AuthType Basic
AuthName "Test"
AuthBasicProvider dbd
Require valid-user
AuthDBDUserPWQuery "SELECT '{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=' FROM users WHERE user = %s"
</Location>
Sadece sha1 hash değerini kullanıcı tablosunda saklıyorum. mod_auth_mysql
Mysql ( SELECT sha1('test')=a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
) tarafından üretilen eski kabul edilen sağlamalar mod_authn_dbd bunu yapmaz.
Göre https://documentation.help/httpd-2.4-es/password_encryptions.html
SHA1 "{SHA}" + Base64 kodlu SHA-1 parolanın özeti.
Htpasswd tarafından oluşturulan şifreler kabul edilir.
htpasswd -bns user test
user:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=
Şimdi bu değeri a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
(şifre testi için veritabanımda saklanan qUqP5cyxm6YcTAhz05Hph5gvu9M=
) mysql içinde (şifre testi için kabul edilen değer ) olarak dönüştürmem gerekiyor
Zaten denedim
SELECT to_base64(sha1('test')), to_base64(ucase(sha1('test'))), to_base64(lcase(sha1('test')));`
ancak hiçbiri beklenen sonuçları vermez.
Ya mevcut şifre karmalarımı beklenen biçime dönüştürmek için bir yola ihtiyacım var ya da mod_authn_dbd
mevcut sha1 özetimi kabul etmeye ikna ediyorum.
Herhangi bir yardım takdir edilecektir
Yanıtlar
Kendi sorunuzu PHP örneği ile cevapladınız. PHP'deki pack () işlevi, ikili verilerin onaltılık temsillerini (bu, SHA-1 sağlamalarının tipik olarak insan tarafından okunabilir şekilde görüntülendiği) orijinal ikili (insan tarafından okunamayan) biçimlerine dönüştürür. Oluşturduğunuz SHA-1 hash'in bu ikili biçimine karşı to_base64 () çalıştırmanız gerekir:
mysql> SELECT to_base64(unhex(sha1('test')));
+--------------------------------+
| to_base64(unhex(sha1('test'))) |
+--------------------------------+
| qUqP5cyxm6YcTAhz05Hph5gvu9M= |
+--------------------------------+
1 row in set (0.00 sec)
Bu durumda, istediğiniz çıktıyı sadece MySQL ile alacaksınız.
Bu, soruma doğrudan bir cevap değil, ancak geçici bir çözüm olabilir, birinin aynı problemle karşılaştığı bir blog yazısı buldum.
http://nileshbansal.blogspot.com/2008/06/password-encryption-mysql-apache-and.html

yorumlarda php ile htpasswd uyumlu bir karmanın nasıl oluşturulacağına dair bir bağlantı vardır. Bunun htpasswd -bns
komutla aynı sonucu verdiğini doğruladım
function sha1_to_htpasswd ( $user, $sha )
{
return $user . ':{SHA}' . base64_encode( pack( "H" . strlen( $sha ), $sha ) );
}
Hiç kimse daha iyi bir çözüm bilmiyorsa (sadece mysql ve php olmadan), kullanıcı tablomu, parolanın bu şekilde saklandığı bir sütunla genişletebilirim. Biraz gereksiz ama işe yaramalı.