1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

WWW-Authenticate

  • maciek
  • 25. August 2004 um 13:01
  • Unerledigt
  • maciek
    16
    maciek
    Mitglied
    Punkte
    2.805
    Beiträge
    434
    • 25. August 2004 um 13:01
    • #1

    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

    PHP
    <?php
      if (!isset($_SERVER['PHP_AUTH_USER'])) {
       header('WWW-Authenticate: Basic realm="My Realm"');
       header('HTTP/1.0 401 Unauthorized');
       echo 'Text to send if user hits Cancel button';
       exit;
      } else {
       echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
       echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
      }
    ?>
    Alles anzeigen


    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. ***

  • webhornet
    5
    webhornet
    Mitglied
    Punkte
    210
    Beiträge
    42
    • 25. August 2004 um 14:03
    • #2

    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.

  • maciek
    16
    maciek
    Mitglied
    Punkte
    2.805
    Beiträge
    434
    • 25. August 2004 um 16:21
    • #3
    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. ***

  • dose
    13
    dose
    Mitglied
    Reaktionen
    4
    Punkte
    1.679
    Beiträge
    335
    • 25. August 2004 um 18:15
    • #4

    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

  • webhornet
    5
    webhornet
    Mitglied
    Punkte
    210
    Beiträge
    42
    • 25. August 2004 um 19:42
    • #5
    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.

  • maciek
    16
    maciek
    Mitglied
    Punkte
    2.805
    Beiträge
    434
    • 25. August 2004 um 22:29
    • #6
    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. :frowning_face: 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:

    Zitat


    If you're under an Apache environment that has this option enabled, but you're on shared hosting so have no access to php.ini, you can unset this value for your own site by placing the following in an .htaccess file in the root:

    php_flag register_globals 0

    The ini_set() function actually accomplishes nothing here, since the variables will have already been created by the time the script processes the ini file change.

    And since this is the security chapter, just as a side note, another thing that's helpful to put into your .htaccess is:

    <Files ".ht*">
    deny from all
    </Files>

    That way no one can load .htaccess in their browser and have a peek at its contents.

    Alles anzeigen


    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. ***

  • maciek
    16
    maciek
    Mitglied
    Punkte
    2.805
    Beiträge
    434
    • 27. August 2004 um 10:57
    • #7

    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. :frowning_face:

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

  • lerod
    13
    lerod
    Mitglied
    Reaktionen
    5
    Punkte
    1.620
    Beiträge
    315
    • 27. August 2004 um 13:05
    • #8

    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

  • maciek
    16
    maciek
    Mitglied
    Punkte
    2.805
    Beiträge
    434
    • 27. August 2004 um 14:47
    • #9

    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. ***

  • lerod
    13
    lerod
    Mitglied
    Reaktionen
    5
    Punkte
    1.620
    Beiträge
    315
    • 27. August 2004 um 15:11
    • #10

    hi!

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

    lg

  • maciek
    16
    maciek
    Mitglied
    Punkte
    2.805
    Beiträge
    434
    • 29. August 2004 um 01:00
    • #11
    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? :frowning_face:

    Oder schau ich vielleicht doch an der falschen Stelle?

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

  • maciek
    16
    maciek
    Mitglied
    Punkte
    2.805
    Beiträge
    434
    • 30. August 2004 um 00:31
    • #12

    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. ***

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung