WWW-Authenticate

  • also ich steh total an. Es gibt in der PHP-Doku unter http://at.php.net/features.http-auth einen Artikel über WWW-Authentication und PHP. Da gibt es folgenden Beispiel-Code drinnen


    den nehm ich her und kopier in mir in meine Datei. Führe diese aus und ... es will einfach nicht funken. $_SERVER['PHP_AUTH_USER'] wird einfach nicht gesetzt. Ich hab's auch schon mit $_SERVER['REMOTE_USER'] ausprobiert, es mag mich aber trotzdem nicht.

    Ich hab auch schon das skript auf einem anderen Server (als meinem lokalen) laufen lassen. Nada. Was könnte ich falsch machen? Bitte um kreative Ideen.

    *** Make it idiot proof, and someone will build a better idiot. ***

  • okay... bei mir (php 5.0.0, apache 2.0.49) funktioniert es ohne probleme...
    welche version nimmst du? vielleicht isses ein apache bug...

    Of course my password is the same as my dog's name.
    His name is QQI23%_Gh5 but i change it twice a month.

  • Zitat von webhornet

    welche version nimmst du? vielleicht isses ein apache bug...


    lokal hab ich Apache/1.3.29 (Win32) PHP/5.0.0 und am Server ist Apache/1.3.29 (Unix) PHP/4.3.4 Kann das bis der älteren Apache Version zusammenhängen? In der oben genannten Doku steht nix über eine Einschränkung der Apacheversion.

    *** Make it idiot proof, and someone will build a better idiot. ***

  • Hat wenn, dann mit der PHP-Version zu tun, aber 4.3.4 unterstützt das sicher...vielleicht hats irgendwas mit register_globals zu tun ? Kann ich mir aber kaum vorstellen...vielleicht was anderes in der PHP Config verdreht ?

    yast, SuSEconfig, apt-get and rpm - the 4 horsemen of the apocalypse

    Platform of insanity :: http://www.dose-xp.org

  • Zitat von dose

    register_globals zu tun ? Kann ich mir aber kaum vorstellen...


    kann eigentlich nicht sein... bei register_globals = true würdest du auf die variable so zugreifen können: $PHP_AUTH_USER

    Zitat von dose

    vielleicht was anderes in der PHP Config verdreht ?


    hmm... vielleicht safe mode?

    Of course my password is the same as my dog's name.
    His name is QQI23%_Gh5 but i change it twice a month.

  • Zitat von webhornet

    kann eigentlich nicht sein... bei register_globals = true würdest du auf die variable so zugreifen können: $PHP_AUTH_USER


    ich kann weder über $PHP_AUTH_USER noch über $_SERVER['PHP_AUTH_USER'] drauf zugreifen. Und außerdem funktioniert's bei mir auch unter PHP 5.0.0 nicht und bei webhornet schon.

    Zitat von webhornet

    hmm... vielleicht safe mode?


    glaub ich auch nicht.

    Zitat


    ; Safe Mode
    ;
    safe_mode = Off

    EDIT:
    ich hab jetzt noch ein bissi weitergesucht und zwar in Richtung des Bugs von PHP und hab zwei Bugreports gefunden.

    1) http://bugs.php.net/bug.php?id=7677
    da verstehe ich nicht ganz, was Sie mit "status code" meinen. Hat jemand Ideen?

    2) http://bugs.php.net/bug.php?id=26606
    da steht, daß die Daten in $_SERVER['PHP_AUTH_USER'] zu finden sein müßten. Tun sie aber wie gesagt nicht. :( Bei mir ist register_globals = Off . Wenn das was hilft, kann ich das ja lokal umstellen. Allerdings nicht am Server. Jetzt würde ich nach einer Möglichkeit suchen, das runtime umzustellen. Da gibt's ja ini_set() und ini_get(). Laut Doku ist aber register_globals mit ini_set nur auf dem Level PHP_INI_PERDIR "changeable" und das folgende Skript funkt leider nicht.

    PHP
    $register = ini_get("register_globals");
    echo "<br>old register globals: \"$register\"";
    if (! ini_set("register_globals", "1"))
    	echo "<br>couldn't set register_globals";
    else
    	echo "<br>new register globals: \"$register\"";

    Hat jemand Ideen, was man da machen könnte? Was ist überhaupt mit PHP_INI_PERDIR gemeint? Oder gibt es was Schlaueres und soll ich diese Idee nicht weiter verfolgen?

    EDIT2:
    und dann hab ich noch was gefunden, was nützlich sein könnte, was ich aber nicht ganz check:


    wie funktioniert das genau mit dem platzieren des php_flag im .htaccess? Hat jemand eine Ahnung? Bzw. kann ich das im php-file selber steuern? Oder zumindest so machen, daß das flag nur für ein bestimmtes .php file gesetzt wird und nicht für die ganze dir? Geht das mit

    Code
    <Files "xyz.php">
    php_flag register_globals 0
    </Files>


    oder bin ich da auf dem Holzweg?

    *** Make it idiot proof, and someone will build a better idiot. ***

  • ich hab jetzt auch versucht register_globals = On zu setzen. Allerdings funktioniert das Skript noch immer nicht. D.h. es schaut - zumindest bei mir - so aus, als ob es unabhängig davon wäre, ob register_globals auf On oder Off ist. :(

    *** Make it idiot proof, and someone will build a better idiot. ***

  • hi!

    kA, in welcher umgebung du programmierst, aber in deinem angegebenen Link http://at.php.net/features.http-auth steht ...

    Zitat


    Die HTTP-Authentifizierung durch PHP ist nur verfügbar, wenn PHP als Apache-Modul läuft und funktioniert daher nicht mit der CGI-Version. In einem PHP-Skript für ein Apache-Modul kann man die Funktion header() benutzen, um die Nachricht "Authentifizierung notwendig" an den Client-Browser zu senden, damit dieser ein Fenster zur Eingabe von Benutzername/Passwort öffnet.


    ich hab das mal unter windows mit iis probiert und hat damals auch ned wirklich funktioniert, weils wahrscheinlich eben daran liegt, wenn php als cgi version benutzt wird.

    lg

  • also in meiner httpd.conf steht unter anderem:

    Zitat

    LoadModule php5_module C:/php/php5apache.dll


    also wenn ich nicht ganz auf dem Holzweg bin, dann rennt das php schon als modul bei mir, oder?

    *** Make it idiot proof, and someone will build a better idiot. ***

  • Zitat von lerod

    ich denke mit phpinfo() kann man sich am besten ansehen, ob und welche module geladen worden sind.


    phpinfo() ... ok. Also phpinfo() gibt bei mir unter "Apache Environment" an der Stelle "GATEWAY_INTERFACE" CGI/1.1 aus. Ist es das, was ich eigentlich nicht hören wollte? :(

    Oder schau ich vielleicht doch an der falschen Stelle?

    *** Make it idiot proof, and someone will build a better idiot. ***

  • ok. Also ich hab mich nochmal schlau gemacht. Und so wie's ausschaut, geht das mit dem auslesen das Paßwortes wirklich nicht. Den Usernamen kann ich jetzt lesen, und zwar geht's mit $_SERVER['REMOTE_USER'].

    Das lustige ist, daß man es auch mit $_ENV['REMOTE_USER'] rauslesen kann. Wenn man allerdings zuerst aus $_SERVER['REMOTE_USER'] liest, dann ist auf 1x $_ENV['REMOTE_USER'] not defined ... ?

    Wie dem auch sei. Zumindest kann ich jetzt den usernamen herauslesen. Das mit dem Lesen des Paßworts werd ich glaub ich aufgeben. Außer jemand von Euch hat noch eine bahnbrechende Idee wie's doch gehen könnte.

    Zitat

    As of PHP 4.3.0, in order to prevent someone from writing a script which reveals the password for a page that was authenticated through a traditional external mechanism, the PHP_AUTH variables will not be set if external authentication is enabled for that particular page and safe mode is enabled. Regardless, REMOTE_USER can be used to identify the externally-authenticated user. So, you can use $_SERVER['REMOTE_USER'].

    EDIT: Hält Ihr es für ein Sicherheitsrisiko den usernamen einfach aus $_SERVER['REMOTE_USER'] heraus zu lesen und keine weitere Überprüfung über die Datenbank zu machen? In der Datenbank werden ja die Paßwörter mit MD5 verschlüsselt, wohingegen sie in dem .htpasswd ja nur mit crypt(passwort, substr(passwort, 0, 2)) verschlüsselt werden.

    *** Make it idiot proof, and someone will build a better idiot. ***

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!