[PHP]Passwortschutz für Verzeichnisse

Nemesis

Nemesis

N3RD
Hi,
ich hätte gerne auf meinem Webserver, dass auf der Startseite der Benutzername und das Passwort angegeben werden müssen und man sich so einloggen kann.
Also wie bei htaccess, nur eben, dass ich kein popup haben möchte, sondern dass ich es gerne in die startseite integrieren würde.

Was ich so bei google gefunden habe, ist das nicht möglich. Wie löst man das am besten ?

es soll dann jeder benutzer nach dem login eine eigene Startseite bekommen, aber die Unterseiten/Verzeichnisse sollen nicht ohne login aufgerufen werden können, also eigentlich schon das was htaccess macht.

kann man das auch auf andere weise lösen ?

danke !
 
Was willst Du denn schützen?
Ein Verzeichnis mit Directory Listing oder ne richtige Website?
 
Eine Session ist dafür nötig.
Du brauchst ein HTML Passwort Formular das als Post gesendet wird. Eine PHP Datei die $_POST die Zugangsdaten vergleicht mit DB oder Textdatei etc.

PHP:
session_start();
if(isset($_POST["user"]))
	{
	if( $_POST["user"] == $usrn && $_POST["passwd"] == $pwd )
		{
		$_SESSION["user"] = $_POST["user"];
		$_SESSION["passwd"] = $_POST["passwd"];
				
		echo '<div id="menu"><center>';
		include('navi.php');
		echo '</div><div id="content">';
		include('content.php');
		}
	}
Code:
<form action=login.php method="post">

Auf der ersten Seite muss die Session gestoppt werden, da evtl ein unbekannter die selbe Session ID hat.
Evtl kannst du jedem über die Session ja zuweisen was er sehen darf.
 
Zuletzt bearbeitet:
Das Kennwort in der Session abzulegen ist keine gute Idee.
 
Stimmt eigentlich würde der User reichen. Man brauch noch eine Überprüfung um z.B. festzustellen ob auf einer anderen Seite der User überhaupt zugriff haben darf.
Einfach mit if (!isset) schauen ob die $_SESSION["user"] gesetzt ist.
 
Zuletzt bearbeitet:
Jup. Das Kennwort wird nur während der Authentifizierung benötigt, danach kann man es wegwerfen. Alles was in die Session kommt liegt im Klartext auf der Platte. Das sollte so wenig wie möglich sein.
 
Aber wenn man einen Paswort-Hash in die Session packt, kann man mit einen Passwortwechsel schnell und einfach alle Sessions invalidieren.
 
@saeckereier
Kann man, bugs ausgenommen, vom Server abfragen welchen wert $_SESSION[password] hätte wenn man in eine laufende Session gerät die man per Zufallszahl generiert hat und so Benutzerdaten klauen ?
 
Zuletzt bearbeitet:
Naja, $_SESSION kannst du ja nur aus PHP heraus auslesen. Du könntest Daten klauen wenn du entweder auf die Sessiondateien Zugriff erhälst oder PHP Code einschleusen kannst. Dann sind aber auch meistens ganz andere Dinge möglich. Auf der anderen Seite ist das der alte Grundsatz der Datensparsamkeit, warum ein Kennwort irgendwo hin speichern, wo man es gar nicht braucht?

Amöbe: Das setzt aber auch voraus, dass du bei jedem Aufruf eines PHP-Skriptes wieder das Kennwort aus dem Backend holst bzw. seinen Hash. Das kostet auch nicht wenig Rechenzeit. Wenn gefordert kann man es so natürlich machen. Und der Hash ist natürlich deutlich weniger kritisch als das Kennwort an sich. Guter Stil wäre es ohnehin, wenn das Kennwort nur dem PHP-Skript der Login-Seite bekannt ist und innerhalb des Skriptes daraus ein Hash gebaut wird, der dann mit einem Hash in der DB verglichen wird. So wandert das Kennwort nirgendswo im Klartext lang. (SSL-Verschlüsselung des Formulars mal vorausgesetzt)
 
wenn in einer offenen session ein ordner geöffnet wird, der mit htaccess geschützt ist, dann wird dafür auch der benutzername und das passwort der session verwendet oder ?

wie kann man die eingaben mit einer datei/datenbank vergleichen, in der das passwort und benutzernamen hinterlegt sind?

danke !
 
PHP:
session_start();
if(isset($_POST["user"]))
    {
    if( $_POST["user"] == $usrn && $_POST["passwd"] == $pwd )
        {
        $_SESSION["user"] = $_POST["user"];
        $_SESSION["passwd"] = $_POST["passwd"];
                
        echo '<div id="menu"><center>';
        include('navi.php');
        echo '</div><div id="content">';
        include('content.php');
        }
    }

Was du aus einer DB brauchst wären $usrn und $pwd wie das gehen sollte findest du im folgenden Link. Ka hab noch nie mit DBs gearbeitet.
http://www.php4-forum.de/beispiele/login.htm
Also ein DB conncet und dann mit PHP abfragen ob s richtig ist was in der Maske ankam. Auf folgeseiten musst du immer Prüfen ob Leser in der Session und ob diese zugelassen ist also immer mit if (!isset=$_SESSION["user"])){
} schauen. Am besten eine Datei per include einbinden.

Auf der Seite der Maske solltest du erst mal die Session beenden und starten. So kommt keiner ungültig in eine Session eines anderen.


Ein wirklich gutes Werk was ich dir zu PHP neben php.net empfehlen kann ist Einstieg in PHP 5 & MySQL5 von Thomas Theis
http://www.galileocomputing.de/kata...ssion=60585403A4d4j9tI9lo&prodtype=standalone

Sonst gibts noch einen guten Riesenwälzer dessen Titel mehr entfallen ist der aber meist zu viel hat und auch wesentlich teurer ist. Ich werd bei zeiten da mal den Titel raussuchen.
 
Zuletzt bearbeitet:
hm, ok, dann sind aber sessions nicht das was ich gesucht habe ... ich habe verzeichnisse mit htaccess geschützt und würde die passworteingabe gerne in einem html-formular machen.


tante edit sagt, dass das nicht geht, siehe »link«
 
Zuletzt bearbeitet:
Du könntest die files aber mit php auflisten lassen und ausgeben, sowie damit auch einen Link erstellen.
 
ich hatte mir überlegt, nachem solen ja die links zu den unterseiten angezeigt werden, dass dort die links via php erstellt werden und dort dann gleich das passwort und der benutzername in den link eingebaut werden.

[user]:[password]@url


hm ... das geht so auch nicht ...
 
Zuletzt bearbeitet:

Ähnliche Themen

phpmyadmin Problem beim Einloggen

Apache2 & ldap & automatisch einloggen

Server's Power

Konfiguration für mehrere Domains lokal nachbilden

RedHat 4 (Lineox 4) in VMware mit BusLogic Treiber

Zurück
Oben