.htaccess-Passwörter über PHP-Formular ändern?
Jens
- php
Hallo,
ich hab mal versucht, über PHP die .htaccess und .htpasswd auszulesen, klappt wunderbar.
Jedoch ist das Passwort ja verschlüsselt... wie mach ich es denn, wenn ich über PHP ein Formular zur Passwort-Änderung anbieten möchte?
hi!
Es ist theoretisch schon möglich, weil die passwörter ansich md5 kodiert sind, jedoch praktisch (zumindest bei mir) ist die md5() funktion von php mit der von Apache nicht ganz kompatibel, wieso weiss ich auch nicht, dazu kenn ich mich zu wenig mit kryptographie aus, ich schätz mal, weil die beiden funktionen verschiedene Private keys verwenden allerdings ists mit meinem wissen über das thema nicht allzuweit her...
als workaround kann ich dir allerdings das nennen: http://www.php.net/manual/en/features.http-auth.php
Moin!
Es ist theoretisch schon möglich, weil die passwörter ansich md5 kodiert sind, jedoch praktisch (zumindest bei mir) ist die md5() funktion von php mit der von Apache nicht ganz kompatibel, wieso weiss ich auch nicht, dazu kenn ich mich zu wenig mit kryptographie aus, ich schätz mal, weil die beiden funktionen verschiedene Private keys verwenden allerdings ists mit meinem wissen über das thema nicht allzuweit her...
Tja, wenn Apache md5() benutzen würde, wäre deine Aussage ja korrekt - benutzt wird aber wohl eher crypt(). Das ist potentiell unsicherer, es gibt in manchen Versionen eine recht gefährliche Begrenzung des Paßwortes auf 8 relevante Zeichen - man kann es aber auch aufbohren, um der fortgeschrittenen Rechenleistung Rechnung zu tragen.
Die Aussage mit Private Keys ist ebenso abstrus: md5() und crypt() sind keine _Verschlüsselungsfunktionen_, sondern _Hashfunktionen_. Das Ergebnis der Funktionen kann man nie mehr rückwärts in das Original verwandeln, und es gibt deshalb auch nicht die Notwendigkeit für irgendwelche privaten oder öffentlichen Schlüssel - es gibt sie schlicht nicht. Der Clou besteht darin, daß Rechenoperationen durchgeführt werden, die nur ultraaufwendig rückwärtsgerechnet werden können - jedenfalls aufwendiger, als alle möglichen Paßworte durchzuprobieren (also zu crypten und zu gucken, ob das Ergebnis identisch ist mit der geheimen Vorlage).
- Sven Rautenberg
Hallo allerseits,
als Lösung würde ich per Formular das alte Passwort übernehmen, mit crypt verschlüsseln und mit dem Eintrag aus der .htpasswd vergleichen.
Hat aber genau wie das ändern den Nachteil, dass Du altes und neues Passwort per Klartext vom Client zum Server schickst, was ein riesiges Loch in die Sicherheit reisst. Einzige Lösung dafür wäre wohl SSL.
Gruss, Thoralf
Hi Thoralf!
Hat aber genau wie das ändern den Nachteil, dass Du altes und neues Passwort per Klartext vom Client zum Server schickst, was ein riesiges Loch in die Sicherheit reisst. Einzige Lösung dafür wäre wohl SSL.
Wie ist das bei einem "normalen" Zugriff auf ein .htaccess-geschütztes Verzeichnis, wird da nicht auch das PW unverschlüsselt übermittelt, oder geschieht das gehashed?
Clemens
Hi Clemens,
Wie ist das bei einem "normalen" Zugriff auf ein
.htaccess-geschütztes Verzeichnis, wird da nicht
auch das PW unverschlüsselt übermittelt, oder
geschieht das gehashed?
das kommt darauf an, welche Authentifizierungsmethode
tatsächlich verwendet wird.
ServerAuthentication ist ja nicht _eine_ Methode, son-
dern ein Bündel solcher Methoden.
Der Apache unterstützt zwei unterschiedliche Verfahren:
(http://httpd.apache.org/docs/mod/core.html#authtype)
1. AuthType Basic:
Dort werden die "credentials" (Benutzername und
Passwort) unverschlüsselt (naja, Base64-encoded,
_das_ ist aber reversibel) übertragen. Gespeichert
werden sie dann auf dem Server so, wie der jeweilige
Server das kann: Apache unter UNIX also in "crypt()"
gehashed, Apache unter Windows bietet drei ver-
schiedene Möglichkeiten (Klartext, MD5 und SHA).
2. AuthType Digest:
Dort werden die "credentials" bereits vom Client
MD5-gehashed und auf dem Server mit dem dort eben-
falls gehashed gespeicherten String verglichen.
"Digest" ist natürlich die bessere Methode - es sei
denn, die Browser verstehen sie nicht.
Und genau das ist das Problem: Weder Netscape 4.x noch
6.x (!) verstehen "Digest", während Opera 4 und M$IE 5
das schon lange können. Mozilla 0.9.7 und damit auch
Netscape 7.0 verstehen inzwischen "Digest" ... aber wer
möchte gerne alle Netscape4&6-Benutzer ausschließen?
Wieder ein Grund mehr, alte Browser auszurotten ... ;-)
Viele Grüße
<img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.gif" border=0 alt=""> Michael
Hi Michael!
Nur mal Danke für Deine - wie so oft - ausführliche und kompetente Antwort!!
Clemens
Hi Thoralf,
als Lösung würde ich per Formular das alte Passwort
übernehmen, mit crypt verschlüsseln und mit dem
Eintrag aus der .htpasswd vergleichen.
Hat aber genau wie das ändern den Nachteil, dass Du
altes und neues Passwort per Klartext vom Client zum
Server schickst, was ein riesiges Loch in die
Sicherheit reisst.
das ist aus der obigen Beschreibung nicht zwingend
abzuleiten (auch wenn es wahrscheinlich ist).
Viele Grüße
<img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.gif" border=0 alt=""> Michael
Hallo Michael,
das ist aus der obigen Beschreibung nicht zwingend
abzuleiten (auch wenn es wahrscheinlich ist).
Stimmt, aber ich hab die Fehlerbeschreibung als Anscheinsbeweis genommen ;)
Gruss, Thoralf