htaccess und PHP
Murti
- php
Hallo zusammen,
habe folgendes Problem welches ich leider auch durch langes Suchen im Web nicht zu lösen bekomme:
In meinem Gästebuch auf meiner HP gibt es einen Login-Bereich für den Admin, der allerdings nicht funktioniert, in der Info-Datei des Gästebuchs wird erläutert, dass wenn "die html-authentifizierung auf dem Server deaktiviert ist der Login-Bereich nicht funktionieren wird"...
Hierzu werden zwei Lösungen vorgeschlagen:
1. Ich kann die Passwortabfrage abschalten.
Dies führt allerdings dazu, dass jeder der sich ins Gästebuch begibt als Admin agieren und z.B. Einträge löschen kann.
2. htaccess
Diese Variante habe ich benutzt um den jeweiligen Ordner indem sich die guestbook.dat befindet in der die Einträge gespeichert werden zu schützen, unswar durch den Kundenservice-Bereich von Strato, wo meine HP liegt.
Wenn ich mich nun in den Ordner begebe und Benutzer und Passwort eingebe erscheint Error 401, mittlerweile ist mir das klar geworden, da ich ja nicht mehr die guestbook.dat und den Admin-Bereich anspreche sondern nur den Ordner in dem die Datei liegt.
Meine Frage ist also folgende:
Wie verknüpfe ich den PHP-Code mit der htaccess-Datei, so dass bei der richtigen Eingabe der in der .htaccess und .htpasswd Dateien gespeicherten Zugangsdaten der Admin-Bereich erscheint?
Ich wäre auch mit einer anderen/einfacheren Lösung zufrieden ;)
P.S.: Da ich ein so ziemlicher Anfänger bin wäre es nett dementsprechend zu Antworten. Ich poste zum ersten Mal ins SELHHTML-Forum, für etwaige Fehler entschuldige ich mich auch schon mal im Voraus :)
Ich danke im Voraus
Gruß
Murti
Hello,
fangen wir mal vorne an:
1.)----------------
Arbeitet PHP bei Dir als Modul oder als CGI?
Das kannst Du mit Hilfe der Funktion
http://de2.php.net/manual/en/function.php-sapi-name.php
feststellen.
Kleines Script reicht hin
<?php
echo php_sapi_name();
?>
Bei Strato vermute ich, dass es die CGI- oder Fast-CGI-Version ist.
2.)----------------
Wenn es die CGI-Version ist, müssen wir prüfen, ob Username _und_ Passwort des Authentifizierungsdialoges im Script ankommen.
Kleines Testscript dafür. Was passiert?
<?php
function authenticate()
{
Header("WWW-authenticate: basic realm="Privater Bereich"");
Header("HTTP/1.0 401 Unauthorized");
# include("wunderbare_leider_nicht_Seite");
echo "Benutzerdaten erforderlich!";
# exit;
}
authenticate();
echo "<pre>\r\n";
echo htmlspecialchars(print_r($_SERVER,1));
echo "</pre>\r\n";
?>
Dann sehen wir weiter.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
erst mal danke für diese schnelle Reaktion.
Es arbeitet als cgi hat sich herausgestellt (Ausgabe war "cgi").
Nachdem ich den kleinen Testscript hochgeladen und angesprochen habe kam eine Benutzerdaten-Abfrage...
Gruß
Murti
Hello,
Nachdem ich den kleinen Testscript hochgeladen und angesprochen habe kam eine Benutzerdaten-Abfrage...
Und ich hätte jetzt gerne die Ausgabe, wenn Du "abbrechen" drückst.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Ach ja ;), das habe ich natürlich gemacht und folgender Code erschien im Browserfenster:
Array
(
[TZ] => MET
[DOCUMENT_ROOT] => /home/strato/www/ce/www.cek-elini.net/htdocs
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
[HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
[HTTP_ACCEPT_ENCODING] => gzip,deflate
[HTTP_ACCEPT_LANGUAGE] => de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
[HTTP_CONNECTION] => keep-alive
[HTTP_HOST] => www.cek-elini.net
[HTTP_KEEP_ALIVE] => 300
[HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)
[REMOTE_ADDR] => 81.173.180.67
[REMOTE_PORT] => 52810
[RZ_php] => 5
[SCRIPT_FILENAME] => /home/strato/www/**/*************/htdocs/************/test.php
[SCRIPT_URI] => http://*************/test.php
[SCRIPT_URL] => /test.php
[SERVER_ADMIN] => service@webmailer.de
[SERVER_NAME] => ****************
[SERVER_PORT] => 80
[SERVER_SOFTWARE] => Apache/1.3.37 (Unix)
[UNIQUE_ID] => SgBMssCoKFEAAFM0CQ4
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /test.php
[SCRIPT_NAME] => /test.php
[PHP_SELF] => /test.php
[REQUEST_TIME] => 1241533618
[argv] => Array
(
)
[argc] => 0
)
Hello,
dann kommst Du nicht drum herum, und musst ein bisschen lesen.
Die Strato Leute senden keine zusätzlichen Informationen aus dem Environment mit.
Die beiden Elemente
$_SERVER['PHP_AUTH_USER']
$_SERVER['PHP_AUTH_PW']
gibt es nur bei PHP als Webserver-Modul.
Das Element
$_SERVER['REMOTE_USER']
ist, soweit ich weiß, nur vorhanden, wenn per HTTP Authentication eine gültige Authentifizierung stattgefunden hat.
Du kannst Deinen gesamten Bereich mit HTTP-Auth nur schützen, wenn Du Dir das entsprechend der Anleitung einrichtest.
http://de.selfhtml.org/servercgi/server/htaccess.htm#
Anderenfalls müsstest Du jedes Script einzeln schützen. Das ginge mit einer Session und in jedem Script müsste dann überprüft werden, ob eine gültige Session besteht, in der eine Authentifizierung vermerkt ist. Dazu sollte der Client dann Cookies unterstützen.
Wenn Du ein zentrales Script hast, über das alle Aktionen ausgelöst werden, reicht es natürlich, diesem die Session-Überprüfung beizubringen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Ok dann danke ich erstmal und mache mich an die Arbeit...
Vielen Dank für die Mühe.
Gruß
Murti