Tech-Corner - Hilfen, Tipps & App-Vorstellungen

Stellt euch vor, ihr wollt den Zugriff auf ein System-Verzeichnis auf eurem Server verhindern. Ihr würdet üblicherweise das Verzeichnis mittels .htaccess und .htpasswd schützen.

Verzeichnis über ein anderes Verzeichnis aufrufbar machen

Stattdessen könnt ihr den direkten Aufruf auf ein Verzeichnis verhindern. Ihr ruft einfach ein anderes Verzeichnis, welches idealerweise auch mittels robots.txt vor Crawlern ausgeschlossen wurde, auf. Nun wird ein Cookie auf eurem Rechner gesetzt, danach werdet ihr zum eigentlichen Verzeichnis weitergeleitet. Dort wird überprüft, ob das Cookie vorhanden ist. Erst dann erhaltet ihr Zugriff auf das Verzeichnis.

Das klingt erstmal furchtbar umständlich. Letztendlich ändert sich lediglich die URL zu eurem geschützten Bereich:

Statt

https://www.url.de/admin

ruft ihr nun

https://www.url.de/hiddenlogin

auf. Nun wird auf “hiddenlogin” ein Cookie gesetzt und ihr werdet zum Ordner “admin” weitergeleitet. Wollt ihr aber den Ordner “admin” direkt aufrufen, gibt euch der Browser die Fehlermeldung zurück, dass die Seite nicht vorhanden ist. Somit sind auch Hacker erstmal ausgesperrt, da sie die alternative URL nicht kennen.

Alternatives Verzeichnis samt Inhalt anlegen

Legt auf eurem Webserver ein neues Verzeichnis an, z. B. “hiddenlogin”. Erstellt dort eine neue index.php und fügt folgenden Inhalt ein (beachtet die Kommentare):

<?php 
    // Tragt Namen und Wert des Cookies ein 
    $cookiename = 'iwantaccess'; 
    $cookiewert = 'accessgranted'; 

    setcookie($cookiename, $cookiewert, 0, '/'); 

    if (!isset($_SERVER['REQUEST_SCHEME'])) 
    { 
        $_SERVER['REQUEST_SCHEME'] = !empty($_SERVER['HTTPS']) && 
$_SERVER['HTTPS'] == 'on' ? 'https' : 'http'; 
    } 

    $url = $_SERVER['REQUEST_SCHEME'] . '://'; 

    $url .= $_SERVER['SERVER_NAME']; 

    // Zielordner "/admin" muss angepasst werden 
    $url .= rtrim(dirname(dirname($_SERVER['SCRIPT_NAME'])), '/') . 
'/admin'; 

    header('Location: ' . $url);
    ?>

Dies bewirkt, dass auf eurem Rechner ein Cookie "iwantaccess" mit dem Wert "accessgranted" gesetzt wird. Danach werdet ihr zum eigentlichen Zielverzeichnis weitergeleitet. Bevor wir das aber austesten, müssen wir noch einen weiteren Schritt unternehmen:

Das eigentliche Verzeichnis schützen

Im eigentlich zu schützenden Verzeichnis legt ihr nun eine .htaccess-Datei mit folgenden Inhalt an:

RewriteEngine On 
RewriteCond %{HTTP_COOKIE} !iwantaccess=accessgranted
RewriteRule .* - [R=404,NC,L] 

Nun überprüft der Server, ob das Cookie "iwantaccess" mit dem Inhalt "accessgranted" auf eurem Rechner vorhanden ist. Erst dann erhaltet ihr Zugang zum Verzeichnis. Ansonsten gibt der Server den Fehlercode 404 (Seite nicht gefunden) aus.

Möchte nun jemand versuchen, auf eurer Admin-Verzeichnis zuzugreifen, wird der Zugriff zurückgewiesen. Da er die alternative URL nicht kennt, kann er auch keinen Zugriff erhalten. Solltet ihr das Gefühl haben, dass sich dennoch jemand Zugriff zu eurem geschützten Bereich verschafft hat, benennt einfach den Ordner, in dem ihr die oben gezeigte index.php angelegt habt, auf dem Server um.

Wie immer gilt: Habt ihr "RewriteEngine on" bereits in einem früheren Teil eurer .htaccess-Datei aktiviert, müsst ihr diese Zeile weglassen.