Skript-Missbrauch verhindern
Auf der sicheren Seite

DeveloperIT-ProjekteSicherheitSicherheitsmanagementSoftware

Die administrativen Eingriffsmöglichkeiten sind bei Shared-Hosting-Paketen in der Regel begrenzt. Vor allem bei den eigenen Skripts kann man aber in Sachen Sicherheit ansetzen.

Eingeschränkter Spielraum

Skript-Missbrauch verhindern

Bei einem Shared-Hosting-Paket mit Skriptsprachen- und Datenbankunterstützung ist die Konfiguration der Web- und Datenbankserver sowie des PHP-Interpreters in der Regel vorgegeben. Der Mieter hat hier im Gegensatz zu einem dedizierten Root-Server wenig Spielraum für individuelle Einstellungen.

In der Regel konfigurieren die Provider die zur Miete angebotenen Lamp-Pakete auf einem hohen Sicherheitslevel, was natürlich auch mit einigen Einschränkungen verbunden sein kann. Dem Mieter eines Shared-Hosting-Pakets bieten sich in der Regel nur rudimentäre Eingriffsmöglichkeiten in die Konfiguration über .htaccess -Dateien.

Dennoch bleibt noch ein weites Feld von Maßnahmen, mit denen man die Sicherheit auch bei einer solchen Konstellation erheblich verbessern kann. Dies betrifft vor allem die Installation fertiger PHP-Skripts, die bei Missachtung der Security-Hinweise böswilligen Angreifern eine breite Angriffsfläche bieten. Man sollte also den Security-Hinweisen, die sich bei solchen Skripts in Bedienungs- und Installationsanleitungen oder Readme-Files finden, unbedingt Beachtung schenken.


Sichere PHP-Skripts

Skript-Missbrauch verhindern

Erfolgt die Installation einer Applikation zum Beispiel über ein Setup-Skript, so sollte dieses nach erfolgreicher Installation in jedem Fall gelöscht oder in einen von außen nicht zugänglichen Bereich verschoben werden. Das Problem ist offensichtlich: Handelt es sich dabei um ein frei zugängliches Open-Source-Skript, so sind die Parameter wie der Name und Pfad der Setup-Routine allgemein bekannt. Für einen böswilligen Angreifer ist es damit ein Leichtes, jederzeit die Setup-Routine erneut aufzurufen und die Applikation zu zerstören oder über diesen Weg an sensible Konfigurationsdaten zu gelangen.

Ein weiteres Risiko stellt der Admin-Bereich einer Web-Applikation dar. In der Regel wird hier ein Inital-Passwort gesetzt, das in der Skriptdokumentation genannt und damit ebenfalls allgemein zugänglich ist. Wer also nicht unmittelbar nach dem ersten Login als Administrator dieses Passwort ändert, handelt grob fahrlässig.

Eine weitere Angriffsfläche bilden die Schreibberechtigungen, die auch die Mieter eines Shared-Hosting-Pakets zum Beispiel via FTP setzen und verändern können. Oftmals ist es notwendig, dass während der Installation zum Beispiel für eine Konfigurationsdatei Schreibrechte gesetzt werden, die jedoch für den laufenden Betrieb nicht benötigt werden. Auch hier sollte sich ein Webmaster verantwortungsbewusst verhalten und solche Schreibrechte nach der Installation wieder zurücksetzen.


Passwortschutz für Verzeichnisse

Skript-Missbrauch verhindern

Eine weitere Methode, potenziellen Angreifern das Leben schwer zu machen, sind geschützte Verzeichnisse. Dies empfiehlt sich vor allem für solche Applikationen, die a priori nicht für die Öffentlichkeit bestimmt sind.

Ein typisches Beispiel dafür ist das MySQL-Tool PhpMyAdmin. Einerseits gehört es gewissermaßen zur Standard-Ausstattung eines jeden Webmasters, der dynamische Webseiten betreibt, andererseits sollte dieses Tool in jedem Fall dem Zugriff des normalen Webpublikums entzogen sein.

Bei einem dedizierten Server kann man PhpMyAdmin problemlos außerhalb des Document-Roots installieren, bei einem Shared-Hosting-Paket gehört es in jedem Fall in einen passwortgeschützten Bereich.

Die meisten Provider bieten dafür komfortable Einrichtungsprozeduren über die Admin-Oberfläche an. Wo dies nicht der Fall ist, kann man sich mit einem .htaccess-File behelfen. Um einen solchen Passwortschutz für ein Verzeichnis einzurichten, gehen Sie so vor: Erstellen Sie in dem Ordner, den Sie schützen wollen, eine Datei mit dem Namen .htaccess. Sie muss den folgenden Inhalt haben:

AuthType Basic
AuthName "Verzeichnis"
AuthUserFile /homepages/xx/xxxxxxx/htdocs/ [Ordner]/.htpasswd
require user [Username]

Die Zeichenfolge /homepages/xx/xxxxxxx/ htdocs/ steht exemplarisch für Ihren Document Root, also den absoluten Pfad zu Ihrer Internet-Präsenz. Den Text Verzeichnis können Sie durch einen beliebigen Text ersetzen. Ersetzen Sie weiterhin ordner durch den Namen des Verzeichnisses, das Sie schützen wollen.

Achten Sie bei der Eingabe außerdem auf Groß- und Kleinschreibung. Den Text Username ersetzen Sie durch einen beliebigen Usernamen. Sie können, um mehreren Personen den Zugang zu ermöglichen, auch mehrere Zeilen der gleichen Form hinzufügen.

Erstellen Sie dann in diesem Ordner eine Datei namens .htpasswd. In diese Datei tragen Sie nach dem Schema Username:VerschlüsseltesPasswort die in der .htaccess
-Datei eingetragen User ein. Jeder User muss in einer eigenen Zeile stehen. Laden Sie diese beiden Dateien im Ascii-Modus in den vorgesehenen Ordner auf Ihrem FTP-Server hoch, den Sie auf diese Weise schützen wollen. Danach ist der Passwortschutz aktiv. Wenn Sie den Passwortschutz wieder deaktivieren wollen, löschen Sie einfach die beiden Dateien wieder aus dem Verzeichnis. Auch einzelne User können Sie wieder löschen.

Kompliziert ist in diesem Zusammenhang nur die Generierung MD5-kodierter Passwörter. Am besten erledigen Sie das über eines der zahlreichen Tools, zum Beispiel mit htpasswd.exe.

Sie können einen solchen Zugriffsschutz auch sehr elegant über entsprechende Online-Generatoren realisieren, die im Web angeboten werden. Einen solchen finden Sie zum Beispiel unter
www.topsubmit.de/dienste/tools/htaccess-generator
. Über ein Formular geben Sie hier die Parameter ein (Verzeichnis, User, Passwörter) und erhalten auf dem folgenden Screen jeweils eine komplette .htaccess– und .htpasswd-Datei, die Sie per Cut and Paste in Ihre Anwendung übernehmen können.


IPs speeren

Skript-Missbrauch verhindern

Die Datei .htaccess ist ein flexibles Instrument. Neben dem erwähnten Verzeichnisschutz per Passwort lassen sich damit auch ein oder mehrere Benutzer via IP-Blocking aussperren. Ein Beispiel dafür kann so aussehen:

order deny, allow
allow from 191.100.77.12
deny from all

Dieser Eintrag erlaubt nur den Zugriff einer bestimmten IP-Adresse. Auch die Ausgabe bestimmter Dateien lässt sich via .htaccess verhindern. Um zum Beispiel zu verhindern, dass Dateien mit der Erweiterung INC ausgegeben werden, in denen oft sensible Konfigurationsdaten wie Passwörter und User-IDs abgelegt sind, ist folgender Eintrag notwendig:


order deny, allow
deny from all

Das Instrument .htaccess ist also eine wirkungsvolle und flexible Methode, den Sicherheitsstandard einer Web-Applikation zu erhöhen.


Verzeichnisse oberhalb Document Root

Skript-Missbrauch verhindern

Um einen Zugriff auf sensible Daten und Programme zu verhindern, gibt es
noch eine weitere Methode, die jedoch nicht bei allen
Shared-Hosting-Anbietern zur Verfügung steht, nämlich die Platzierung
außerhalb des Document-Root-Verzeichnisses, auf das ja ein Browser nur
Zugriff hat. Ein Verzeichnis oberhalb dieses Standard-Zugriffspfades ist
daher ein optimaler und sicherer Platz für Konfigurationsdateien, in
denen zum Beispiel die Zugangsparameter für eine MySQL-Datenbank stehen.

Ist dies nicht möglich, bleibt immer noch der Weg, eine andere
Datei-Erweiterung zu wählen. Die Bezeichnung config.inc.php bietet in
jedem Fall einen größeren Schutz als config.inc.


Aktualisierungen beachten

Skript-Missbrauch verhindern

Haben Sie ein PHP-Skript aus dem Web geladen und auf Ihrem Hosting-Paket installiert und angepasst, sollten Sie weiterhin regelmäßig die Seite des Entwicklers besuchen und insbesondere sicherheitsrelevante Updates im Auge behalten. Sicherheitslücken von Open-Source-Anwendungen sprechen sich in der Netzgemeinde schnell herum, aber ebenso schnell stehen passende Patches und Updates zur Verfügung, mit denen man diese Lücken schließen kann. Es ist daher ein absolutes Muss, solche Hinweise zu beachten und Ihre PHP-Applikationen mit den angebotenen Updates möglichst umgehend zu aktualisieren.


PHP-Installation checken

Skript-Missbrauch verhindern

Die Sicherheitseinstellungen von PHP sind bei einem Shared-Hosting-Paket Ihrem direkten Zugriff weitgehend entzogen. Was Sie allerdings tun können, ist, die Installation zu überprüfen. Das lässt sich mit einem PHP-Skript realisieren, in dem die Zeile echo phpinfo(); stehen muss. Beim Aufruf dieser Miniapplikation wird Ihnen das komplette PHP-Environment angezeigt, das Ihnen auf Ihrem Shared-Hosting-Paket zur Verfügung steht.


Formulare als Sicherheitsrisiko

Skript-Missbrauch verhindern

Formulare stellen eine weitere Angriffsfläche dar, über den Angreifer Ihre Applikation attackieren können. Bei Gästebüchern, Foren, Feedback-Formularen oder Weblogs läuft die Interaktion mit den Usern grundsätzlich über Formulare. Interaktive Websites, die Hilfe mit solcher Applikationen betrieben werden, stellen damit ein potenzielles Sicherheitsrisiko dar, wenn bei der Programmierung nicht mit Sorgfalt gearbeitet wird. Eingaben ohne Prüfung zu übernehmen ist kein Programmierstil mit Sicherheitsbewusstsein.

Prüfen Sie in jedem Fall, ob der Input dem erwarteten Datentyp entspricht. PHP bietet eine große Auswahl an Funktionen zum Validieren des Inputs, von den einfachsten Variablenfunktionen und Character Type Functions bis hin zu den Perl-kompatiblen Regulären Ausdrücken.

Wenn die Applikation numerischen Input erwartet, implementieren Sie zum Beispiel eine Prüfung der Daten mit is_numeric() oder die Änderung des Typs mit settype().


Fehlerbehandlung

Skript-Missbrauch verhindern

Eine Standard-Angriffstaktik von Hackern besteht darin, durch Eingabe unzulässiger Daten Programmabstürze zu verursachen und aus den zurückgegebenen Fehlermeldungen ein Profil des anzugreifenden Systems zu erstellen. Der nächste Schritt ist dann, zu versuchen, zum Beispiel Variablen zu überschreiben oder zu modifizieren.

Die normalerweise zurückgegebenen Fehlermeldungen von PHP können für den Entwickler hilfreich sein, wenn dieser ein Skript debuggen möchte, jedoch kann dies in einem Live-System auch versteckte Variablen, ungeprüfte Syntax und andere gefährliche Informationen aufdecken und böswilligen Surfern interessante Infos liefern.

Es gibt verschiedene Lösungen, dieses Problem zu beseitigen. Die perfekteste wäre fehlerfreier Code, der Fehlermeldungen erst gar nicht entstehen lässt. Eine andere Variante ist, die Ausgabe von Fehlermeldungen generell zu deaktivieren. Schließlich bliebe noch der Weg, einen eigenen Error-Handler zu programmieren, der nur selbst formulierte Fehlermeldungen ausgibt.