Teil von  SELFPHP
Letztes Update: 14.09.2007 09:07:01

Navigation

Seite Startseite
Seite Aktuelles
Seite Seite News*
Seite Seite Pressemitteilungen*
Seite SELFPHP
Seite Seite Über SELFPHP
Seite Seite Werbung
Seite Seite Kontakt
Seite Seite Unsere Banner
Seite Seite Impressum
Seite Qozido
Seite Seite Diving Edition
Seite Seite Snorkeling Edition
Seite SELFPHP Dokumentation
Seite Seite PHP-Skripte
Seite Seite PHP Befehlsreferenz
Seite Seite PHP 5 Praxisbuch
Seite Seite PHP Code Snippets
Seite Seite SELFPHP in Buchform
Seite Anbieterverzeichnis
Seite Seite Globale Branchen
Seite Seite Webhosting/Server
Seite Services
Seite Seite Forum*
Seite Seite RSS-Feeds*
Seite Seite Downloads*
Seite Seite Gratis-Video-Lektionen*
Seite Seite SELFPHP auf Heft-CD*
Seite Seite Newsletter*
Seite Internet Security
 sponsored by  
Seite Stellenangebote*
Sedo - Bei uns wird PHP großgeschrieben
Seite Premium-Partner   
Webhosting/Serverlösungen
Seite Produktempfehlung   
Seite Seite SteadyBackup

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  
 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 100.000 Beiträgen finden Sie sicher die passende Antwort!*  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!*

Vorname: 
Name:
E-Mail:
 




 

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.



 




 sponsored by

Sedo - Bei uns wird PHP großgeschrieben


VERIO - An NTT Communications Company


HighText iBusiness


Webspace-Verkauf.de


video2brain




 Premium-Partner
 Webhosting/Serverlösungen

BPI-Systeme


Premium-Partner Pixel X


Premium-Partner First Colo


Premium-Partner dogado Internet




Qozido


© 2001-2008 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt