Wie kann man htaccess Anmeldung über ein PHP-Formular realisieren?

3 Antworten

Ich glaube, was du da haben willst hat mit htaccess gar nichts zu tun.

Willst du:

  • eine Anmeldung per PHP realisieren, die per HTTP-Authentifizierung durchgeführt wird?
  • Dich über ein HTML-Formular anmelden für einen Bereich, der per HTTP-Authentifizierung geschützt ist?

MrCommandBlock  09.04.2020, 17:29

Er möchte eine Anmeldung in htaccess wo die benötigten Daten von z. B. einem PHP-Script kommen.

0

Angenommen, deine URL sieht so aus: http://some-server.com/. Dann kannst du die Nutzerdaten nach diesem Format in eine URL stecken:

http://username:password@some-server.com/

Lies dazu auch hier.

Ich habe mir ein kleines Beispiel auf einem lokalen Webserver zusammengebaut. Erst habe ich einen Ordner restricted im Webverzeichnis angelegt und diesen via .htpasswd und .htaccess geschützt. Ein Generator wie dieser hilft dabei. Der Pfad, der auf die .htaccess zeigt, muss ausgehend vom Webroot (oder der Festplatte) sein.

In den geschützten Ordner habe ich eine welcome.html-Datei gelegt.

<!doctype html>
<title>Welcome</title>
<h1>Welcome</h1>

Und in den ungeschützten Bereich die index.html, die das Login-Formular beinhaltet:

<!doctype html>
<title>Login</title>
<form action="http://data@localhost:80/restricted/welcome.html">
  <label for="username">Username:</label><input id="username">
  <label for="password">Password:</label><input id="password" type="password">
  <input type="submit">
</form>
<script>
  document.forms[0].addEventListener("submit", function() {
    let username = document.getElementById("username").value;
    let password = document.getElementById("password").value;
    let url = `${username}:${password}`;
    this.setAttribute("action", this.getAttribute("action").replace("data", url));
  });
</script>

Vor Versand wird das action-Attribut des Formulars angepasst. Die Nutzerdaten werden also in die Adresse eingetragen (bzw. gegen meinen Platzhalter data ausgetauscht).

Das hat nach einem Test mit dem Chrome-Browser jetzt auch entsprechend geklappt. Bei falschen Eingabedaten wird allerdings der Basic Authentication Dialog vom Browser nochmals eingeblendet. Trotz korrekter Logindaten bin ich ab da nicht mehr weitergekommen. Das heißt, die Logindaten müssen bereits beim Login-Formular passen.

Im Firefox-Browser hat es besser funktioniert (ein erneuter Versuch bei falschen Daten war über den Dialog erfolgreich), in IE und Edge hingegen überhaupt nicht. Der Opera-Browser hat sich erwartungsgemäß genauso wie Chrome verhalten.

Soweit ist das alles nur ein Experiment. Von einer praktischen Nutzung ist absolut abzuraten. Die sensiblen Nutzerdaten werden hier über die URL mitgegeben und werden vom Webserver bspw. gern mitgeloggt. Das URL-Format selbst wird schon seit einiger Zeit als deprecated eingestuft:

Use of the format "user:password" in the userinfo field is deprecated.

Quelle (Abschnitt 3.2.1)

Lies des Weiteren zur Basic Authentication hier mehr.

Schreibe dir besser ein eigenes PHP-Skript, welches die Nutzerdaten via POST empfängt und dann entsprechend auswertet.

Es gibt zahlreiche Artikel im Internet, die erklären, wie man eine halbwegs sichere Login-Anwendung entwickelt. Auch hier gab es schon öfter entsprechende Fragen.

Noch ein paar Tipps zur Absicherung kannst du hier nachlesen.

Meiner Meinung nach gar nicht. Die Zugriffssteuerung per .htaccess greift, bevor überhaupt eine Seite ausgeliefert wird.


Minkowski 
Beitragsersteller
 04.04.2020, 17:14

Die Datei für die Anmeldung muss ja nicht zwingend im Ordner der htaccess-Datei sein

0
franzhartwig  04.04.2020, 17:44
@Minkowski

Du möchtest also, um es mal beispielhaft aufzudröseln, eine Dateiaufrufen:

/login.php

Diese Datei greift nun per PHP auf eine /geschütztes_Verzeichnis/.htaccess zu, um den Zugriffsschutz zu realisieren?

Wenn ich das richtig verstanden habe, verstehe ich den Sinn nicht. Benutzernamen und Passwörter stehen auch nicht in der .htaccess, sondern in einer anderen Datei, z. B. der .htpasswd. Die Dateinamen beginnen mit .ht, weil Webserver von der Grundkonfiguration so eingestellt sind, dass Dateien, deren Namen mit .ht beginnen, nicht dargestellt werden. Um nun einen Zugriffsschutz per PHP zu realisieren, kannst Du aber die Datei mit Benutzernamen und Passwörtern außerhalb des Server Root ablegen. Da kann ein Browser auch nicht zugreifen.

0