Norbert: wie muss man das Passwort verschluesseln

Hallo,

die Dateien .htpasswd und .htaccess erstelle ich mit einem PHP-Script. Das klappt online bei allen Providern problemlos. Nur local klappt es absolut nicht. Auch die einfachsten Username-Passwort-Paare werden vom Apache mit der dafuer bekannten Meldung "401 Authorization Required" abgelehnt.

  • Apache/2.2.2 (Win32)
  • PHP/5.1.4
    Rein IMHO muss es an der Funktion crypt, mit der das Passwort verschluesselt wird, liegen,
    aber ich habe keinen Plan, was man anders machen muss:
<?php  
$keys = 'ich';  
$value = 'foo';  
$htpwd = fopen('/home/htdocs/login/.htpasswd', 'w');  
fputs($htpwd, "$keys:".crypt($value)."\n");  
fclose($htpwd);  
?>

Natuerlich koennte man es auch mit "htpasswd.exe" die Dateien erstellen, aber ich moechte es gerne mit PHP machen. Online klappt es doch auch damit.

Hoffentlich weiss hier jemand Abhilfe ...

Gruss und Dank
Norbert

  1. hallo,

    • Apache/2.2.2 (Win32)
    • PHP/5.1.4

    Beides könnte gelegentlich geupdated werden - was allerdings mit deiner Frage nichts zu tun hat.

    $htpwd = fopen('/home/htdocs/login/.htpasswd', 'w');

    In Windows gibt es eine andere Verzeichnisstruktur. Das heißt, ein Verzeichnis "/home" existiert vermutlich nicht.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Hallo Christoph,

      • Apache/2.2.2 (Win32)
      • PHP/5.1.4
        Beides könnte gelegentlich geupdated werden

      warum,
      es funktioniert doch ansonsten problemlos?
      Ic habe einfach keine Lust mehrere tausend Scripte immer wieder neu ueberarbeiten zu muessen, nur weil einige OS-Typen Langeweile haben oder sich mit fragwuerdigen Aenderungen profilieren wollen.

      was allerdings mit deiner Frage nichts zu tun hat.

      doch,
      wenn ich naemlich noch den alten 1-er Indianer haette, wuerde crypt auch noch funktionieren. Irgendetwas wurde bei dem 2-er verschlimmbessert, nur ich weiss nicht was. Die grossen Provider haben diese Aenderungen teilweise in der config abgestellt, deswegen funktioniert dort auch die crypt-Verschluesselung noch. Nur hier lokal eben nicht.

      Und das Beste ist, dass mir auch niemand sagen kann, wie man jetzt mit PHP ein gueltiges Passwort erzeuen kann.
      Oder wie man in der config das neue Passwort abstellt, was ja auch reichen wuerde.

      $htpwd = fopen('/home/htdocs/login/.htpasswd', 'w');
      In Windows gibt es eine andere Verzeichnisstruktur.

      stimmt

      Das heißt, ein Verzeichnis "/home" existiert vermutlich nicht.

      wieso,
      unter Windows darf man Verzeichnisse auch selbst anlegen und voellig willkuerlich benamsen.

      Auf meiner D:-Partition gibt es alles, was bei oeffentlichen Providern so existiert, und dazu gehoert auch /home. Das habe ich so eingefuehrt, damit Scripte lokal und online mit der gleichen Struktur laufen koennen. Und Windows selbst akzeptiert auch fast ueberall den Slash statt des Backslash in Verbindung mit PHP.

      Gruss und Dank
      Norbert

    • Apache/2.2.2 (Win32)
    • PHP/5.1.4
      Rein IMHO muss es an der Funktion crypt, mit der das Passwort verschluesselt wird, liegen,

    Unter Windows muss das Passwort unverschlüsselt in '.htpasswd' stehen.

    mfg
    Rato

    --
    §§§
    Meine Postings basieren lediglich auf mein Wissen und können völliger Blödsinn sein.
    §§§
    1. hallo,

      Unter Windows muss das Passwort unverschlüsselt in '.htpasswd' stehen.

      Nein, muß es nicht unbedingt (crypt ist durchaus erlaubt). Und die Paßwortdatei muß auch nicht zwingend .htpasswd heißen - tut sie aus Gewohnheit aber oft.

      Grüße aus Berlin

      Christoph S.

      --
      Visitenkarte
      ss:| zu:) ls:& fo:) va:) sh:| rl:|
      1. Hi Rato,

        Unter Windows muss das Passwort unverschlüsselt in '.htpasswd' stehen.

        oops,
        das lese ich heute zum ersten mal!
        Und das komischste ist dabei, es funktioniert auch noch.

        Trotzdem wuerde ich gerne wissen, wie man mit PHP unter Windoof ein gueltiges Passwort erzeugt.

        Gruss und Dank
        Norbert

      2. Hi Christoph,

        Nein, muß es nicht unbedingt (crypt ist durchaus erlaubt). Und die Paßwortdatei muß auch nicht zwingend .htpasswd heißen - tut sie aus Gewohnheit aber oft.

        AFIAK funktioniert aber nur ein MD5-Crypt und kein Standard-DES-Crypt.

        Viele Grüße,
          ~ Dennis.

        1. Hallo Dennis,

          Nein, muß es nicht unbedingt (crypt ist durchaus erlaubt).
          AFIAK funktioniert aber nur ein MD5-Crypt und kein Standard-DES-Crypt.

          hmm,
          also Standard-DES-Crypt geht definitiv nicht
          und mit dem MD5-Crypt kommt auch nur ein 401-er zustande.

          Habt Ihr eventuell noch andere Ideen ...

          Gruss und Dank
          Norbert

      3. Hi,

        Unter Windows muss das Passwort unverschlüsselt in '.htpasswd' stehen.

        Nein, muß es nicht unbedingt (crypt ist durchaus erlaubt).

        Seltsam, daß die Dokumentation des Apache (für V 1.3, für V 2.0 und für V 2.2) gegenteiliges sagt (bei der Beschreibung der Option -d).

        Aber Du weißt das sicher besser als die Typen von Apache.org ...

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. Hallo,

    die Dateien .htpasswd und .htaccess erstelle ich mit einem PHP-Script. Das klappt online bei allen Providern problemlos. Nur local klappt es absolut nicht. Auch die einfachsten Username-Passwort-Paare werden vom Apache mit der dafuer bekannten Meldung "401 Authorization Required" abgelehnt.

    • Apache/2.2.2 (Win32)
    • PHP/5.1.4
      Rein IMHO muss es an der Funktion crypt, mit der das Passwort verschluesselt wird, liegen,
      aber ich habe keinen Plan, was man anders machen muss:

    <?php

    $keys = 'ich';
    $value = 'foo';
    $htpwd = fopen('/home/htdocs/login/.htpasswd', 'w');
    fputs($htpwd, "$keys:".crypt($value)."\n");
    fclose($htpwd);
    ?>

    Das funktioniert nur, wenn das Serversystem eine crypt-Funktionalität zur Verfügung stellt. Nur dann verwendet Apache auch diese crypt-Funktionalität zum Verschlüsseln des Passwortes für htauth. Windows-Systeme haben soetwas nicht. Deshalb verwendet Apache hier einen speziell für Apache angepasseten md5-Algorithmus zum Verschlüsseln. Siehe: <http://httpd.apache.org/docs/2.2/programs/htpasswd.html>. Diesen Algorithmus verwendet auch htpasswd.exe für Windows.  
      
    Man kann nun also nicht einfach die PHP-Funktion md5() verwenden, sondern müsste im Apache-Quellcode nachsehen, wie der "speziell für Apache angepasseten md5-Algorithmus" aussieht und diesen nachbauen.  
      
    
    > Natuerlich koennte man es auch mit "htpasswd.exe" die Dateien erstellen, aber ich moechte es gerne mit PHP machen. Online klappt es doch auch damit.  
    
    Mach es doch mit PHP \_und\_ htpasswd.exe  
    ~~~php
      
    <?php  
    $keys = 'ich';  
    $value = 'foobar';  
    $output = array();  
    $returnval = -1;  
    exec("c:/programme/xampp/apache/bin/htpasswd -b c:/htpasswd $keys $value", &$output, &$returnval);  
    echo $returnval;  
    var_dump($output);  
    ?>  
    
    

    viele Grüße

    Axel

  3. Hallo allerseits,

    es steht natuerlich mal wieder alles im PHP-Manual, nur finden muss man es eben.
    Die dort von "mikey_nich" vorgestellte Funktion loest das Problem in genau der Weise,
    wie ich es gerne haette.

    Gruss und Dank
    Norbert