Htaccess user auslesen

Hallo,

ich habe ein Verzeichnis welches mit htaccess geschützt ist, jetzt möchte ich mit hilfe eines php scriptes welches auch in diesem HTACCESS ordner ist, auslesen welche User sich angemeldetet haben bzw. den benutzernamen des users, der dieses script gerade aufruft anzeigen.

geht das irgendwie?

danke im vorraus.

MFG

David

hiho,

ich habe ein Verzeichnis welches mit htaccess geschützt ist,
jetzt möchte ich mit hilfe eines php scriptes welches auch in
diesem HTACCESS ordner ist, auslesen welche User sich
angemeldetet haben bzw. den benutzernamen des users, der
dieses script gerade aufruft anzeigen.

geht das irgendwie?

zu sehen wer sich gerade angemeldet hat, *glaube* ich geht nicht, ich *glaube* das die anmeldung mit einem cookie funktioniert, und daher kannst du das nicht nachpruefen da das cookie clientseitig liegt.

aber alle Infos zur anmeldung mit einem bestimmten Benutzeraccount gibt es, falls das logging aktiv ist, im apache syslog.

das auslesen der Dateien gelingt mit fopen und read, da gibt es aber auch ganz viel infos und alternative Methoden bei
http://php.net/manual/de
die von mir aufgefuerten muessen nicht unbedingt das non plus ultra fuer dein problem sein.

hth josh

Hallo,

ich habe ein Verzeichnis welches mit htaccess geschützt ist,
jetzt möchte ich mit hilfe eines php scriptes welches auch in
diesem HTACCESS ordner ist, auslesen welche User sich
angemeldetet haben

das geht nur, wenn Du es irgendwo mitloggst…

bzw. den benutzernamen des users, der
dieses script gerade aufruft anzeigen.

echo $PHP_AUTHED_USER;
wenn ich mich recht erinnere…
kann auch auth statt authed sein…

geht das irgendwie?

HTH
Munich

Hallo

Informationen über den aktuellen Aufruf erhältst du mit folgenden Variablen (von php.net):

$_SERVER[‚PHP_AUTH_USER‘]
Wenn HTTP-Authentifizierung mit Apache als Modul benutzt wird, enthält diese Variable den Benutzernamen, der vom Anwender angegeben wurde.

$_SERVER[‚PHP_AUTH_PW‘]
Wenn HTTP-Authentifizierung mit Apache als Modul benutzt wird, enthält diese Variable das Passwort, das vom Anwender angegeben wurde.

$_SERVER[‚AUTH_TYPE‘]
Wenn HTTP-Authentifizierung mit Apache als Modul benutzt wird, enthält diese Variable den Authentifizierungs-Typ.

Übrigens: Ich benutze kein Apachemodul und es geht trotzdem.

Ein ‚angemeldet‘ in dem Sinne gibt es bei .htaccess (HTTP-Authentifizierung) nicht, Benutzername und Passwort werden bei jedem Seitenaufruf durch den Browser mitgeschickt. Du müsstest also den Apache fragen, wer in den letzten … Minuten dieses Verzeichnis aufgerufen hat und zwar mit welchem Benutzernamen. Ich weiss nicht, ob das möglich ist.

Johannes Matschke

hi,

Informationen über den aktuellen Aufruf erhältst du mit
folgenden Variablen (von php.net):

Ein ‚angemeldet‘ in dem Sinne gibt es bei .htaccess
(HTTP-Authentifizierung) nicht, Benutzername und Passwort
werden bei jedem Seitenaufruf durch den Browser mitgeschickt.
Du müsstest also den Apache fragen, wer in den letzten …
Minuten dieses Verzeichnis aufgerufen hat und zwar mit welchem
Benutzernamen. Ich weiss nicht, ob das möglich ist.

wie gesagt, der webserver muss mitloggen. wenn der benutzer dann zugreift werden in den entsprechenden Zeilen der Logs auch Benutzername angegeben!

hier ein Beispiel:

xxx.xxx.xxx.xxx - username [27/Mar/2006:10:54:29 +0200] "GET /index.php HTTP/1.1" 200 4947

das muesste man dann entweder selber parsen, oder wer weiss, vielleicht gibt es schon fertige tools…klar muss es die geben, zumindest kann das Programm webalizer ja schliesslich auch auf diese log dateien zugreifen. Da webalizer offen ist, kann man schauen ob man da nicht das ein oder andere verwenden kann.

gruss josh

Hallo

wie gesagt, der webserver muss mitloggen. wenn der benutzer
dann zugreift werden in den entsprechenden Zeilen der Logs
auch Benutzername angegeben!

Richtig. Die Frage ist nur, ob die Logdaten der letzten 10 Minuten auf dem Server verfügbar sind. Auf meinem Server werden immer Mitternacht die Logdaten des letzten Tages per FTP zugänglich gemacht und nach einigen Monaten wieder gelöscht. Die aktuellen Logdaten sind jedoch nicht verfügbar.

Johannes Matschke

Falls das bei gewissen Leuten anders ist, hier ein kleiner auf-meinem-Mist-gewachsen-Code:

<?php $statuscode=array(<br />100=\>'Continue',
101=\>'Switching Protocols',
200=\>'OK',
201=\>'Created',
202=\>'Accepted',
203=\>'Non-Authoritative Information',
204=\>'No Content',
205=\>'Reset Content',
206=\>'Partial Content',
300=\>'Multiple Choices',
301=\>'Moved Permanently',
302=\>'Moved Temporarily',
303=\>'See Other',
304=\>'Not Modified',
305=\>'Use Proxy',
400=\>'Bad Request',
401=\>'Unauthorized',
402=\>'Payment Required',
403=\>'Forbidden',
404=\>'Not Found',
405=\>'Method Not Allowed',
406=\>'Not Acceptable',
407=\>'Proxy Authentication Required',
408=\>'Request Time-Out',
409=\>'Conflict',
410=\>'Gone',
411=\>'Length Required',
412=\>'Precondition Failed',
413=\>'Request Entity Too Large',
414=\>'Request-URL Too Large',
415=\>'Unsupported Media Type',
500=\>'Server Error',
501=\>'Not Implemented',
502=\>'Bad Gateway',
503=\>'Out of Resources',
504=\>'Gateway Time-Out',
505=\>'HTTP Version not supported'
);

echo " **HTTP-Protokoll:** \n

    \n";
    
    $log\_array\_einzelzeilen=file('http.log');//logdatei zeilenweise in ein Array lesen
    
    foreach ($log\_array\_einzelzeilen as $znummer =\> $zeile)//mit diesen Zeilen tue
     {
     $log\_array\_einzelzeilen[$znummer]=trim($zeile);//überflüssige Zeichen an Anfang und Ende entfernen
     }
    
    foreach ($log\_array\_einzelzeilen as $znummer =\> $zeile)//mit diesen Zeilen tue
     {
     if ($zeile==''){unset($log\_array\_einzelzeilen[$znummer]);}//Zeile, wenn leer, aus dem Array entfernen
     if ((substr($zeile,strlen($zeile)-1)!='"') and (!empty($log\_array\_einzelzeilen[$znummer + 1])))
     {//getrennte Zeilen zusammenfügen
     $log\_array\_einzelzeilen[$znummer] = $zeile . $log\_array\_einzelzeilen[$znummer + 1];
     unset($log\_array\_einzelzeilen[$znummer + 1]);
     }
     }
    
    unset($log);
    foreach ($log\_array\_einzelzeilen as $zeile)//mit den restlichen Zeilen tue
     {
     $log\_array\_einzelstrings=explode(' ',$zeile,12);//Zeile in Einzelstrings aufteilen
    /\* [0] =\> IP
     [1] =\> -
     [2] =\> User
     [3] =\> [Tag(2)/Monat(3)/Jahr(4):Stunde(2):Minute(2):Sekunde(2)
     [4] =\> Zeitzone(5)]
     [5] =\> "Methode
     [6] =\> Request
     [7] =\> Protokoll"
     [8] =\> Statuscode
     [9] =\> Größe in Byte
     [10] =\> "Referer"
     [11] =\> "Browserkennung" \*/
    
     //Einzelstrings aufbereiten
     $log\_array\_einzelstrings[3] = str\_replace('[','',$log\_array\_einzelstrings[3]);
     $log\_array\_einzelstrings[4] = str\_replace(']','',$log\_array\_einzelstrings[4]);
     $log\_array\_einzelstrings[5] = str\_replace('"','',$log\_array\_einzelstrings[5]);
     if (substr\_count($log\_array\_einzelstrings[6],'?')\>0)
     {$log\_array\_einzelstrings[6] = substr($log\_array\_einzelstrings[6],0,strpos($log\_array\_einzelstrings[6],'?'));}
     $log\_array\_einzelstrings[7] = str\_replace('"','',$log\_array\_einzelstrings[7]);
     $log\_array\_einzelstrings[10] = str\_replace('"','',$log\_array\_einzelstrings[10]);
     if (substr\_count($log\_array\_einzelstrings[10],'?')\>0)
     {$log\_array\_einzelstrings[10] = substr($log\_array\_einzelstrings[10],0,strpos($log\_array\_einzelstrings[10],'?'));}
     $log\_array\_einzelstrings[11] = str\_replace('"','',$log\_array\_einzelstrings[11]);
     if ($log\_array\_einzelstrings[8]!='200')
     {$log\_array\_einzelstrings[12] = $log\_array\_einzelstrings[8] .' '. $log\_array\_einzelstrings[6];}
     if (substr\_count($log\_array\_einzelstrings[11],'http://')\>0)
     {$log\_array\_einzelstrings[13] = $log\_array\_einzelstrings[5] .' '. $log\_array\_einzelstrings[6] .' '. $log\_array\_einzelstrings[11];}
    
    /\* [0] =\> IP
     [1] =\> -
     [2] =\> User
     [3] =\> Tag(2)/Monat(3)/Jahr(4):Stunde(2):Minute(2):Sekunde(2)
     [4] =\> Zeitzone(5)
     [5] =\> Methode
     [6] =\> Request (ohne Querysting)
     [7] =\> Protokoll
     [8] =\> Statuscode
     [9] =\> Größe in Byte
     [10] =\> Referer (ohne Querysting)
     [11] =\> Browserkennung
     [11] =\> Statuscode Request (wenn Statuscode != '200')
     [12] =\> Methode Request Browserkennung (wenn 'http://' in Browserkennung) \*/
    
    
     foreach ($log\_array\_einzelstrings as $estringtyp =\> $estring)//mit diesen Einzelstrings tue
     {
     if (@in\_array($estring,$log[$estringtyp]['str']))//(B):Wenn diese IP in $log[0][str] schon existiert
     {
     $log[$estringtyp]['anzahl'][array\_search($estring,$log[$estringtyp]['str'])]++;//(B):dann erhöhe $log[0][anzahl][\*Nummer der IP\*]
     }
     else//sonst
     {
     $log[$estringtyp]['str'][]=$estring;//(B):Füge die IP in $log[0][str] ein
     $log[$estringtyp]['anzahl'][]=1;//(B):Füge die Anzahl 1 in $log[0][anzahl] ein
     }
     }
     }
    
    foreach ($log as $typ=\>$inhalt)
     {
     if (in\_array($typ,array(0,2,5,6,7,8,10,11,12,13)))
     {
     switch ($typ)
     {
     case 0: echo "IPs"; break;
     case 2: echo "User"; break;
     case 5: echo "Methoden"; break;
     case 6: echo "Anfragen"; break;
     case 7: echo "Protokolle"; break;
     case 8: echo "Statuscodes"; break;
     case 10: echo "Referer"; break;
     case 11: echo "Browserkennungen"; break;
     case 12: echo "Probleme beim Aufruf"; break;
     case 13: echo "Suchmaschinen"; break;
     }
     echo "\n==============\n";
     array\_multisort($inhalt['str'],$inhalt['anzahl']);
    
     foreach ($inhalt['str'] as $knummer=\>$derstring)
     {
     echo str\_pad($inhalt['anzahl'][$knummer],4,' ',STR\_PAD\_LEFT).'x '.$derstring;
     if ($typ==8) {echo ' - '.$statuscode[$derstring];}
     echo "\n";
     }
     echo "\n\n";
     }
     }
    
    echo "\n

\n\n";
?\>