Vorgeschichte

Bei populärer Open Source Software wie z.b. Joomla, Wordpress, Drupal oder Typo3 ist bekannt wie der Administationsbereich zu erreichen ist.
Dies ermöglicht beispielsweise Brute Force Attacken.

Man kann diesen Bereich mit Hilfe von Erweiterungen oder Verzeichnisschutz zusätzlich schützen, jedoch beinhalted dies meistens ein weiteres Passwort oder eine komplizierte URL mit passwortähnlichen GET Parametern.
Ich nutze selbst auf diversen Seiten das AdminExile Plugin jedoch gingen mir je längers je mehr die verschiedenen URL Parameter auf die Nerven weshalb ich mich auf die Suche nach einer einfacheren Lösung machte.

Ausführung

Zuerst erstellt man einen Ordner im Joomla Stammverzeichnis z.b.

{root}/pmjadmin

In diesem Ordner erstellt man dann eine

index.php

mit folgendem Inhalt:

<?php
// Cookiename + Wert, die in der htaccess getestet werden sollen
// Können angepasst werden
$cookiename = 'pmjcookie';
$cookievalue = 'legit';

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

// Setze das Scheme, wenn vom Server nicht gegeben (http(s))
if (!isset($_SERVER['REQUEST_SCHEME']))
{
  $_SERVER['REQUEST_SCHEME'] = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 'https' : 'http';
}

// http(s)://
$url = $_SERVER['REQUEST_SCHEME'] . '://';

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

// eventuell Unterordner + "administrator"
$url .= rtrim(dirname(dirname($_SERVER['SCRIPT_NAME'])), '/') . '/administrator';

// Weiterleitung
header('Location: ' . $url);

Danach erstellt man im Ordner

{root}/administrator

eine

.htaccess

Datei mit folgendem Inhalt:

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

Damit kann der Administrationsbereich nur noch erreicht werden wenn zuerst das Cookie aus der index.php gesetzt wurde indem man die URL

your.domain/pmjadmin

aufruft.

Anmerkung: Das Cookie wird auf "ewig" gesetzt!
Falls man also an einem fremden Computer arbeitet muss das Cookie nach getaner Arbeit manuell gelöscht werden!
Ansonsten ist der Administrationsbereich auf diesem Gerät immer über die Standard-URL erreichbar.

Zusätzliche Anpassungen

Cookie Lebenszeit

Wie vorgängig erwähnt bleibt das Cookie ewig bestehen wenn man es nicht manuell löscht.
Mit folgendem Code kann man aber die Session Lebenszeit aus der Joomla Konfiguration übernehmen.

In der

{root}/pmjadmin/index.php

fügt man einfach ganz am Anfang folgenden Code ein:

require_once('../configuration.php');
$config = new JConfig();
$cookielifetime = time() + ($config->lifetime * 60);
$config = null;

und ersetzt folgende Zeile:

- setcookie($cookiename, $cookievalue, 0, '/');
+ setcookie($cookiename, $cookievalue, $cookielifetime, '/');

Weiterleitung auf individuelle 404 Fehlerseite

In der

{root}/administrator/.htaccess

Datei kann man das 404 Eror Document definieren falls man eine individuelle Fehlerseite hat.
Man fügt einfach am Ende der Datei folgende Zeile ein:

ErrorDocument 404 /link-to-your-custom-error-page

Quellen

Das ganze Tutorial basiert komplett auf Administrator-Verzeichnis per htaccess schützen veröffentlicht von Benjamin Trenkle auf Wicked Software.
Auf dieser Seite findet man auch noch zusätzliche Tips wie man dieses Konzept noch erweitern kann.
Ich habe nur die Teile in diesem Artikel verarbeitet die ich selbst benötigt habe.