Teil von  SELFPHP
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++



:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP? In über 120.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Passwortschutz für Verzeichnisse


Systemvoraussetzung

  • Linux
  • Windows
  • PHP 3
  • PHP 4
  • PHP 5

Datei(en)

crypt.php

Problem

Sicherlich kennen Sie das kleine, aber immer wiederkehrende Problem: Sie wollen einfach auf die Schnelle ein komplettes Verzeichnis mit einer .htaccess-Datei schützen. Die meisten Webhoster bieten in Ihren Konfigurationsmenüs oftmals eine Möglichkeit, bestimmte Verzeichnisse zu schützen.

Nehme ich mich aber selbst als Beispiel, stelle ich fest, dass ich meist keine Lust habe, mich erst einmal in das System meines Providers einzuloggen, diesen Service aufzurufen und zum Schluss durch eine Menge an Verzeichnissen zu wandern, bis ich endlich das Erstellen eines Passworts erledigt habe. Es mag zwar keine Stunden dauern, aber zehn bis fünfzehn Minuten nimmt die Aktion schon in Anspruch.

Wirklich toll wäre es, einfach eine PHP-Datei mit FTP auf den Server zu legen, diese dann im Browser aufzurufen und den Verzeichnisschutz in vollem Umfang fertig eingerichtet vorzufinden.

Lösung

Die Lösung hierfür ist sehr einfach und erfordert noch nicht einmal viel Aufwand. Den Programmierer des Programms kostete es zwar etwas Zeit, Sie als Leser dieses Buches dürfen sich über das fertige Skript im beiliegenden ZIP-Archiv freuen.

Wie benutzen für die Realisierung die PHP-Funktion crypt(). crypt() ist eine Einweg-String-Verschlüsselung (Hashbildung) und liefert uns ein Passwort auf Grundlage von DES, das nur mit sehr großem technischem Aufwand wieder entschlüsselt werden kann. Allerdings wird dabei das Passwort nicht wirklich entschlüsselt, sondern mit einer Brute-Force-Attacke geknackt.

Brute-Force-Attacken sind Versuche eines Programms, dass verschlüsselte Passwort zu knacken, indem alle möglichen Kombinationen von Buchstaben, Sonderzeichen und Zahlen ausprobiert werden.

Sie sollten daher niemals Passwörter verwenden, die zu kurz sind oder nur aus Kleinbuchstaben etc. bestehen. Auch sind Passwörter wie z. B. Namen, Vornamen, Tiernamen etc. nicht sicher, da es Wörterbücher für Brute-Force-Attacken gibt.

Sie sollten immer Passwörter nutzen, die keinen Sinn ergeben und nur schwer zu knacken sind, also aus mehr als nur sechs Zeichen bestehen. Dieses nur am Rande, denn das Thema Passwörter und Brute-Force-Attacken in seiner ganzen Bandbreite würde ein ganzes Buch füllen.

function make_htaccess($user, $authName, $passwdFile ="")
   @param   string   $user
   @param   string   $authName
   @param   string   $passwdFile
   @return   void

Die Function make_htaccess() erwartet als Parameter den Benutzernamen ($user), den Logintext ($authName), sobald das Loginfenster sichtbar wird, und als optionalen Parameter den kompletten Pfad ($passwdFile) zu Ihrer Datei .htpasswd (ohne abschließenden Slash).

Zuerst findet eine Überprüfung (40) statt, ob Sie ein Verzeichnis zu der Datei .htpasswd angegeben haben. Sollte die Variable leer sein, wird die Datei in dem Verzeichnis erstellt, in dem auch der Verzeichnisschutz gilt (und in dem auch die Datei crypt.php liegt).

Bei einer leeren Variable wird nunmehr das aktuelle Arbeitsverzeichnis (41) in die Variable gespeichert. Im nächsten Schritt wird der Inhalt der Datei .htaccess aufgebaut (43-46) und mit den Werten (Benutzername, Logintext und Pfad zur .htpasswd) der einzelnen Variablen gefüllt.

Im aktuellen Arbeitsverzeichnis, also dort, wo auch der Verzeichnisschutz erstellt werden soll, wird die Datei .htaccess erstellt (48-50). Sollte nun ein Benutzer dieses Verzeichnis lesen wollen, wird Ihr Webserver zuerst die Datei .htaccess einlesen und feststellen, dass dieses Verzeichnis geschützt ist.

Der Webserver wird daraufhin ein Loginfenster öffnen und nach Benutzernamen und Passwort fragen. Die durch den Benutzer eingegebenen Daten wird der Webserver mit den Daten in der Datei .htpasswd vergleichen und bei erfolgreichen Logindaten das Verzeichnis freigeben.

038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
function make_htaccess($user$authName$passwdFile="") {
    
    if(empty(
$passwdFile))
        
$passwdFile=dirname(__FILE__);
    
    
$access .=    'AuthType Basic' "\n";
    
$access .=    'AuthName "' $authName '"' "\n";
    
$access .=    'AuthUserFile ' $passwdFile '/.htpasswd' "\n";
    
$access .=    'require user ' $user "\n";
    
    
$handle fopen(".htaccess","w");
    
fputs($handle,$access);
    
fclose($handle);

}
Beispiel 12.1: crypt.php

function make_htpasswd($user, $passwd, $passwdFile ="")
   @param   string   $user
   @param   string   $passwd
   @param   string   $passwdFile
   @return   void

Die Function make_htpasswd() erwartet als Parameter den Benutzernamen ($user), das Passwort ($passwd) und als optionalen Parameter den kompletten Pfad ($passwdFile) zu Ihrer Datei .htpasswd (ohne abschließenden Slash).

Zuerst findet eine Überprüfung (68) statt, ob Sie ein Verzeichnis zu der Datei .htpasswd angegegeben haben. Sollte die Variable leer sein, so wird die Datei in dem Verzeichnis erstellt, in dem auch der Verzeichnisschutz gilt (und in dem auch die Datei crypt.php liegt). Bei einer leeren Variable wird nunmehr das aktuelle Arbeitsverzeichnis (69) in die Variable gespeichert.

Im nächsten Schritt wird das im Klartext übergebene Passwort mit crypt() verschlüsselt. Dieses erzeugte und verschlüsselte Passwort ist nicht mehr entschlüsselbar und kann nur mit sehr hohem technischem Aufwand herausgefunden werden. Der Benutzername und das verschlüsselte Passwort werden mit einem Doppelpunkt voneinander getrennt in eine Variable (72) gespeichert, damit dies im letzten Schritt in der Datei gespeichert (74-76) werden kann.

Zur Speicherung benutzen wir den Parameter „a“, der unsere Kombination aus Benutzernamen und Passwort in einer Datei anhängt. Sie möchten sicherlich nur eine .htpasswd verwalten, aber verschiedene Verzeichnisse schützen. Durch diesen Parameter ist dies möglich, da existierende Passwörter in der Datei .htpasswd bestehen bleiben.

066:
067:
068:
069:
070:
071:
072:
073:
074:
075:
076:
077:
078:
function make_htpasswd($user$passwd$passwdFile="") {
    
    if(empty(
$passwdFile))
        
$passwdFile=dirname(__FILE__);
        
    
$passwd crypt($passwd);
    
$htpasswd $user ':' $passwd "\n";
    
    
$handle fopen($passwdFile '/.htpasswd',"a");
    
fputs($handle,$htpasswd);
    
fclose($handle);
    
}
Beispiel 12.2: crypt.php

Bevor Sie beide Funktionen aufrufen, müssen Sie lediglich einen Konfigurationsparameter wie z. B. Benutzername, Passwort, Logintext und den Pfad zur Datei .htpasswd setzen. Falls Sie bereits eine bestehende Passwortdatei auf Ihrem Server haben, so müssen Sie lediglich die Funktion make_htaccess() (92) aufrufen und auf Ihre bestehende Passwortdatei verlinken.

080:
081:
082:
083:
084:
085:
086:
087:
088:
089:
090:
091:
092:
093:
094:
095:
// Den Benutzernamen für den Login
$user 'Damir';

// Das Passwort für den Login
$passwd 'meinPasswort';

// Der Text, der angezeigt wird wenn das Login-Fenster geöffnet wird.
$authName 'Meine geschütztes Verzeichnis';

//Den kompletten Pfad zu der Datei .htpasswd, ohne abschließenden Slash (/)
$passwdFile '';

make_htaccess($user$authName$passwdFile);
make_htpasswd($user$passwd$passwdFile);

// unlink("crypt.php");
Beispiel 12.3: crypt.php

Inhalt der Datei .htaccess

AuthType Basic
AuthName "Mein geschütztes Verzeichnis"
AuthUserFile /homepages/16/d147850360/htdocs/verz/.htpasswd
require user Damir

Inhalt der Datei .htpasswd

Damir:$1$abqjYKHv$sUIR4CbV4zRG27oENNvbX1

Wie Sie sehen, war die Lösung relativ simpel. Das Programm könnte aber natürlich weiter ausgebaut werden. Z. B. könnten Sie am Schluss der Datei noch folgenden Befehl ausführen:

  unlink("crypt.php");

Die Datei würde sich dann, nachdem der Verzeichnisschutz erstellt wurde, selbst löschen. Dies hätte den Vorteil, dass Sie das nicht noch per FTP erledigen müssten.



 


Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!

Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.


 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


Microsoft Deutschland GmbH
twosteps.net - ...Premium-Webhosting
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2009 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt