# Passwortschutz mit .htaccess + Integration in HTML-Formular



## altox-de (14. März 2005)

Passwortschutz mit .htaccess + Integration in HTML-Formular

Hallo zusammen.
Ich habe folgendes Problem und würde mich über eure Hilfe sehr freuen.

Ich möchte einen Teil meiner Website ("Administrations-Bereich" für Kunden)
mit Benutzernamen und Passwort schützen. Die Anmeldung soll direkt über ein Formular
auf der Startseite erfolgen. Link: http://www.altox.de/001-27-altox-04-05/pages/start.html
(Achtung: Auf der Seite ist _DER_ Passwortschutz noch nicht eingebaut! Dienst nur für's Design)

Alle Inhalte, die geschützt werden sollen, liegen in folgendem Ordner auf dem Server:
http://www.altox.de/admin - dort liegen auf die .htaccess-Datei und die .htpasswd-Datei,
die folgenden Inhalt haben:

.htaccess:

```
AuthUserFile html/admin/.htpasswd
AuthType Basic
AuthName "altox Kundenlogin"
require valid-user
```
.htpasswd:

```
kunde1:t.0rlQCnvoW1s
kunde2:t.D4nfAuiBY4I
kunde3:t.Zn2hctZGKYs
```
Das funktioniert soweit so naja - ok, eigentlich gar nicht, aber das hab' ich halt schon.
Nur soll eben der Login auf der Startseite stattfinden und nicht in einem extra Fenster.
Ich weiß, dass das aussieht, als ob der Webmaster der Seite da was rummurksen will,
aber ich hätte das lieber so - so ein neues Fenster sieht so unprofessionell aus.

Habe auch schon viel hier im Forum, bei Google und in den Tutorials gesucht,
bin aber nirgends schlauer geworden...

Bitte helft mir!
Danke, Claudia


*P.S.: Ich habe auch schon eine Lösung mit Confixx gefunden.
Ich möchte eben nur, dass der .htaccess-Login in meine Seite eingebunden ist.*


----------



## redlama (14. März 2005)

Hallo Claudia!

Also erstens sieht ein Passwortschutz, wie er von der .htaccess generiert wird nicht unprofessionell aus.
Zweitens muss in der .htpasswd der Nutzername in Klartext und das Passwort verschlüsselt eingetragen sein. Es gibt bei PHP eine Funktion namens crypt(), mit der Du de Passwörter verschlüsseln kannst.

redlama


----------



## altox-de (14. März 2005)

Hallo!
Ja, ich weiß, aber ich würde den Passwortschutz gerne GANZ in meine Seite integrieren - unsichtbar sozusagen...
Ich habe die Angaben oben aktualisiert und ein verschlüsseltes Passwort gewählt.

Mir geht es aber hauptsächlich um die Integration in HTML etc.
Wie kann ich .htaccess nutzen, ohne das .htaccess-Fenster öffnen zu müssen?


----------



## redlama (14. März 2005)

Du könntest in Deiner HTML Seite (wenn Du wirklich nicht den vorhandenen Passwortschutz nutzen willst) ein Formular erstellen, wo Du 2 <input> Felder hast. Das eine davon müsste dann vom Typ password sein, damit nur * zu sehen sind.
Dann könntest Du nach dem absenden der Zugangsdaten in einer Datei nachschauen, ob es einen Nutzer mit dem entsprechenden Passwort gibt. Dazu müsst das Passwort dann nicht verschlüsselt sein.
Du könntest das ganze aber auch anstelle mit einer Datei, mit einer Datenbank machen, dann hättest Du auch die Gewährleistung, dass die Passwörter sicherer gelagert sind, als in der Datei!
Die .htaccess bräuchtest Du dann natürlich nicht mehr!
Ach ja, der Schutz des Verzeichnisses geht dann (soweit ich weiß) aber auch verloren, wenn Du ein eigenes Login verwendest!

redlama


----------



## altox-de (14. März 2005)

Hallo redlama!
Ist das mit der Datenbank denn allzu schwierig bzw. könntest du mir vielleicht erklären, wie ich sowas machen muss/kann ?

Wenn ich eine Datenbank verwende geht der Schutz des Verzeichnisses verloren?
Kann ich das nicht weiterhin irgendwie mit dem Confixx schützen?


----------



## redlama (14. März 2005)

Wenn du das Verzeichnis mit Confixx schützt, dann bekommst Du doch wieder das extra Fenster für die Anmeldung, ...
Was den Zugriff auf die Datenbank betrifft, da gibt es schon ein paar tutorials. Hier mal der Link zu einem tutorial.

redlama


----------



## altox-de (14. März 2005)

Hallo!
Nein, nein! In Cofixx kann man unter "Passwortschutz" bei "Tools" einige Verzeichnisse schützen lassen... Das ist dann auch .htaccess, nur dass Confixx das alles übernimmt.
Das Einlogg-Fenster erscheint genauso!

Kannste mal probieren: http://www.altox.de/001-27-altox-04-05/pages/start.html
und auf "Login" klicken.


----------



## redlama (14. März 2005)

Das war eigentlich das, was ich mit meinem Beitrag ausdrücken wollte.
Dann ergibt sich doch aber wieder das Problem, dass Du, wenn Du mit Confixx den Verzeichnisschutz einrichtest, das extra Fenster für die Anmeldung bekommst.
Das willst Du aber nicht haben, sondern ein, in eine HTML Seite integriertes, Loginformular. Das bietet Dir jedoch nur das Login und keinen Verzeichnisschutz.
Es ist also eine Zwickmühle! Entweder Login mit HTML oder Verzeichnisschutz!

redlama


----------



## altox-de (14. März 2005)

Hi!
Nachdem die Daten eh nicht sooo wichtig sind, entscheide ich mich für die HTML (und somit auch die Datenbank) -variante. DIe zu schützenden Dateien kann ich ja vielleicht irgendwie in einem anderen, "versteckten" Verzeichnis unterbringen...

*Wichtig sind demnach folgende Punkte:*
- Konfiguration einer Datenbank
- Login-Maske mit HTML 
- die Zieladresse (= Verzeichnis) darf im Browserfenster nicht sichtbar sein,
  dass die Seite nicht ohne Passwortschutz aufgerufen werden kann.
  Am besten sollte sich in der Adresszeile gar nichts verändern.
  Das mit der Statsuzeile kann man ja regeln...

Ich versuche das mal mit der Datenbank...
Kannst du mir dabei aber vielleicht helfen? Das wäre wirklich toll.
Liebe Grüße,
Claudi


----------



## Sven Mintel (15. März 2005)

Es geht auch beides... geschützte Dateien und "HTML-Login".

Verbiete per htaccess den Zugriff auf die zu schützenden Dateien generell.

Um die geschützten Dateien trotzdem dem Benutzer anzuzeigen, brauchst du lediglich ein PHP-Skript, welches sie bspw. per incude(), require(), readfile() ausliest oder verarbeitet... der htaccess-Schutz betrifft nicht etwaige Zugriffe im Dateisystem... was dabei der Fall wäre.
Dieses PHP-Skipt müsste dan erst die Berechtigung prüfen.... und Falls erfolgreich, die Dateien auslesen o.ä.


----------



## altox-de (15. März 2005)

Hey Sven!
Das hört sich ja absolut klasse an!
Kannst du mir vielleicht n Link schicken, wo ich sowas lernen/nachgucken kann,
oder vielleicht sogar was posten? Das wäre wirklich toll!
Besonders das mit dem PHP Script dürfte für mich schwierig werden...
Liebe Grüße,
Claudi


----------



## redlama (16. März 2005)

Mit eine der einfachsten Formen für ein Loginformular wäre folgendes:
	
	
	



```
<html>
  <body>
    <form method="post" action="auswertung.php">
      Nutzername <input type="text" name="nutzer" size="40"><br />
      Passwort <input type="password" name="passwort" size="40">
    </form>
  </body>
</html>
```
Und die Überprüfung, ob der Login korrekt war, würde dann in der auswertung.php stattfinden.
Da wäre jetzt nur interessant, ob Du das ganze per Datenbank oder per Datei machen willst? Ich persönlich halte eine Datenbanktabelle mit den Logindaten für sicherer.

redlama


----------



## altox-de (16. März 2005)

Hallo.
Gut, ich kann zwar eine Datenbank anlegen und weiß so ungefähr, wie man darin auch eine Tabelle anlegen kann, aber so genau kenne ich mich damit auch nicht aus.
Ist das denn arg schwer? Liebe Grüße, Claudia


----------



## redlama (16. März 2005)

So, habe jetzt eine (sehr vereinfachte und grafisch nicht sehr ansprechende) Lösung:
login.html
	
	
	



```
<html>
  <body>
    <form method="post" action="auswertung.php">
      Nutzername <input type="text" name="nutzer" size="40"><br />
      Passwort <input type="password" name="passwort" size="40"><br />
      <input type="submit" value="Login">
    </form>
  </body>
</html>
```
auswertung.php
	
	
	



```
<?php
$dbconnect = mysql_connect("localhost", "Benutzer", "Passwort"); //Hier den Benutzer und das Passwort für den Datenbankzugriff rein
mysql_select_db("Datenbankenname"); //Hier den Datenbankennamen rein
$sql_befehl = "SELECT `name`, `pass` FROM `login`";
$ergebnis = mysql_query($sql_befehl, $dbconnect);
$treffer = 0;
while($satz = mysql_fetch_row($ergebnis))
{
  if(($satz[0] == $_POST["nutzer"]) and ($satz[1] == $_POST["passwort"]))
    $treffer = 1;
}
if($treffer == 1) //Wenn der Login erfolgreich war
{
  header("Location: xyz.html"); //Weiterleitung zur gewünschten Seite
  exit;
}
else //Wenn der Login fehlgeschlagen ist
{
  header("Location: login.html"); //Weiterleitung zur login.html, damit erneut eingeloggt werden kann
  exit;
}
?>
```
Und in der Datenbank habe ich eine Tabelle namens "login" angelegt mit folgenden Parametern:
Spalte 1: Name = "name", Typ = "varchar(255)", Primary Key
Spalte 2: Name = "pass", Typ = "varchar(255)"

So und dann habe ich in die Tabelle login einen Datensatz eingefügt.
Und dann sollte es laufen, ...

redlama


----------



## altox-de (16. März 2005)

Hallo!
Danke @redlama für dein tolles Posting. *schmatz*
Habe auch schon alles eingebaut: http://www.altox.de/001-27-altox-04-05/pages/start.html
Aber: Wie füge ich neue Benutzer hinzu? Die müssen sich nicht selbst anmelden können.
Die Anmeldung muss nur ich vornehmen können.
Liebe Grüße, Claudia


----------



## redlama (16. März 2005)

Ok!
Also wenn nur Du die Benutzer anlegen willst, dann brauchst Du 2 Dateien, die so ähnlich arbeiten, wie das Login. Du musst nur schauen, wie Du sie so legst, dass nur Du damit arbeiten kannst.
benutzer.html
	
	
	



```
<html>
  <body>
    <form method="post" action="insert.php">
      Benutzer <input type="text" name="nutzer" size="40"><br />
      Passwort <input type="password" name="passwort" size="40"><br />
      <input type="submit" value="Login">
    </form>
  </body>
</html>
```
insert.php
	
	
	



```
<?php
$dbconnect = mysql_connect("localhost", "Benutzer", "Passwort"); //Hier den Benutzer und das Passwort für den Datenbankzugriff rein
mysql_select_db("Datenbankenname"); //Hier den Datenbankennamen rein
$sql_befehl = "INSERT INTO `login` (`name`, `pass`) VALUES ('".$_POST["nutzer"]."', '".$_POST["passwort"]."')";
$ergebnis = mysql_query($sql_befehl, $dbconnect);
header("Location: xyz.html"); //Weiterleitung zur gewünschten Seite
?>
```
Damit wird das Passwort verschlüsselt und beide Werte werden in die Datenbank eingefügt!

redlama


----------

