2016-12-10 2 views
1

Ich verwende MAMP 3.2.2 unter Windows 10, Apache über Port 8888. Ich versuche, das Verzeichnis C: \ MAMP \ htdocs \ admin mit einem Passwort zu schützen \ indem Sie eine .htaccess- und eine .htpasswd-Datei darin platzieren.MAMP Htaccess Passwortschutz: Dialog "Authentifizierung erforderlich" wird wiederholt

.htacess ist:

AuthType Basic 
AuthName "Password Protected Area" 
AuthUserFile C:\MAMP\htdocs\admin\.htpasswd 
Require valid-user 

Htpasswd (user = Test, Passwort = Test) ist:

test:dGRkPurkuWmW2 

ich MAMP Apache geprüft httpd.conf, und es sagt, in Zeile 202:

<Directory /> 
    Options FollowSymLinks ExecCGI 
    AllowOverride All 
    Order deny,allow 
    Allow from all 
</Directory> 

Und in Zeile 220:

Wenn Sie versuchen, zu " http://localhost:8888/admin/index.php" zu navigieren, erhalte ich den Dialog "Authentifizierung erforderlich", in dem Sie angeben, dass " http://localhost:8888 Ihren Benutzernamen und Ihr Passwort anfordert".

Aber nach Eingabe von Benutzername und Passwort erscheint der Dialog immer wieder, anstatt mir den Zugriff zu gewähren.

Was fehlt mir?

Vielen Dank im Voraus!

+0

Das Problem war, dass ich PHP „$ EncryptedPassword = crypt ($ typedPassword, base64_encode ($ typedPassword wurde mit)) um das verschlüsselte Passwort zu erstellen, da ich es vorziehen würde, nicht auf die Verwendung von Passwortgeneratoren von anderen Seiten angewiesen zu sein.Kennt jemand den richtigen Weg, um das Passwort zu verschlüsseln? –

Antwort

2

Das Passwort test:dGRkPurkuWmW2 ist falsch. Überprüfen Sie die Protokolldateien (\mamp\apache\logs\error.log), um die Fehlermeldungen zu sehen, sollte es so etwas wie dieses:

[Sat Dec 10 10:39:04.965830 2016] [auth_basic:error] [pid 2200:tid 1648] [client ::1:49487] AH01617: user test: authentication failure for "/protected/": Password Mismatch 

verwenden HTPasswd Generator Formular ein gültiges Passwort zu generieren, die in Ihrem Fall für Benutzer test und Passwort test etwas sein wird, wie diese, aber es produziert immer etwas anderes:

test:$apr1$2pi0lu5b$Omg8StTZWO0m5lMfq/D8d. 

Hier ist ein Screen-Capture mit meinem Arbeitsbeispiel ist das Passwort oben mit:

Protected directory login

UPDATE

Beachten Sie, dass dieser Algorithmus für Windows- arbeitet. Das Passwort, das Sie bei Ihrem Code haben, funktioniert auf Linux basierten Systemen und es ist der Standardalgorithmus von Apache 2.2.17 und älter. Von Apache 2.2.18 basiert die Standardverschlüsselungsmethode auf MD5 und kann sowohl auf Windows als auch auf Linux basierten Systemen verwendet werden. Sie können mehr darüber hier lesen How to generate passwords for .htpasswd using PHP.

PHP-Code mit der Funktion crypt_apr1_md5 eine .htpasswd Passwort-Eingabe für Verschlüsselung kompatibel für Windows zu erzeugen:

<?php 
// APR1-MD5 encryption method (windows compatible) 
function crypt_apr1_md5($plainpasswd) 
{ 
    $salt = substr(str_shuffle("abcdefghijklmnopqrstuvwxyz"), 0, 8); 
    $len = strlen($plainpasswd); 
    $text = $plainpasswd.'$apr1$'.$salt; 
    $bin = pack("H32", md5($plainpasswd.$salt.$plainpasswd)); 
    for($i = $len; $i > 0; $i -= 16) { $text .= substr($bin, 0, min(16, $i)); } 
    for($i = $len; $i > 0; $i >>= 1) { $text .= ($i & 1) ? chr(0) : $plainpasswd{0}; } 
    $bin = pack("H32", md5($text)); 
    for($i = 0; $i < 1000; $i++) 
    { 
     $new = ($i & 1) ? $plainpasswd : $bin; 
     if ($i % 3) $new .= $salt; 
     if ($i % 7) $new .= $plainpasswd; 
     $new .= ($i & 1) ? $bin : $plainpasswd; 
     $bin = pack("H32", md5($new)); 
    } 
    for ($i = 0; $i < 5; $i++) 
    { 
     $k = $i + 6; 
     $j = $i + 12; 
     if ($j == 16) $j = 5; 
     $tmp = $bin[$i].$bin[$k].$bin[$j].$tmp; 
    } 
    $tmp = chr(0).chr(0).$bin[11].$tmp; 
    $tmp = strtr(strrev(substr(base64_encode($tmp), 2)), 
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/", 
    "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); 

    return "$"."apr1"."$".$salt."$".$tmp; 
} 

// Password to be used for the user 
$username = 'test'; 
$password = 'test'; 

// Encrypt password 
$encrypted_password = crypt_apr1_md5($password); 

// Print line to be added to .htpasswd file 
echo $username . ':' . $encrypted_password; 
+0

Vielen Dank, Christos. Ich habe versucht, das verschlüsselte Passwort mit "$ chiffreedPassword = crypt ($ typedPassword, base64_encode ($ typedPassword)) zu erstellen;" in PHP. Weißt du, was wäre der richtige Weg? –

+0

Sie sind herzlich willkommen @ AnnaCivolani. Wenn Sie meine Antwort hilfreich finden, dann markieren Sie diese bitte als akzeptiert. Um zu sehen, wie man eine Antwort akzeptiert, lesen Sie bitte hier: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

+0

Akzeptiert! Würdest du zufällig den richtigen Weg kennen, das Passwort mit einem PHP-Skript anstelle eines Passwort-Generators von anderen Webseiten zu verschlüsseln? –

Verwandte Themen