Zum Inhalt springen
Der Guide für ein smartes Leben.
SQL-Injection

Teil 6: SQL-Injection: So schützen Sie Ihre Webserver vor Hackerangriffen

Autoren: Redaktion pcmagazin und Anna Kobylinska • 8.3.2010 • ca. 3:00 Min

Benutzer einiger BSD-Systeme wie FreeBSD können außerdem eine Applikation durch Virtualisierung auf Betriebssystemebene in einer geschützten Sicherheitsumgebung mit einem eigenen Kernel gefangen nehmen (Fachjargon: "Jails"). Durch solche unkonventionellen Vorsichtsmaßnahmen lassen sich die Folge...

Benutzer einiger BSD-Systeme wie FreeBSD können außerdem eine Applikation durch Virtualisierung auf Betriebssystemebene in einer geschützten Sicherheitsumgebung mit einem eigenen Kernel gefangen nehmen (Fachjargon: "Jails"). Durch solche unkonventionellen Vorsichtsmaßnahmen lassen sich die Folgen eines eventuellen Hacker-Angriffs im worst-case-Szenario auf eine eng begrenzte Zone einschränken.

Verbesserte Datenbank-Security

Wer eine Datenbank-Bibliothek mit Unterstützung für gebundene Parameter und Platzhalter wie zum Beispiel PEAR::DB, PDO einsetzt, kann sich über zusätzliche Sicherheit freuen. Am Beispiel von PEAR::DB kommen diese erweiterten Sicherheitsfunktionen zum Beispiel wie folgt zum Tragen:

$sql = 'INSERT
INTO user (nachname)
VALUES (?)';
$dbh->query($sql,
array($clean['nachname']));

Der Vorteil einer Datenbankbibliothek wie zum Beispiel PEAR::DB besteht darin, dass eine direkte Manipulation der Abfrage von außen nicht möglich ist. Zusätzlich hat PEAR::DB den Vorteil, dass es die Ausgabe automatisch ausmaskiert. Wer eine PEAR::DB-Bibliothek einsetzt, braucht sich nur noch um das Filtern der Eingabe zu kümmern.

Fazit

Zur Vermeidung von SQL-Injections gibt es keine perfekte Einzellösung. Es ist jedoch unstrittig, dass man Eingaben filtern und Ausgaben ausmaskieren muss. Darüber hinaus ist der Einsatz aktueller PHP-, My SQL- und Apache-Versionen unverzichtbar. Oft bedeutet höhere Sicherheit einen deutlich höheren Zusatzaufwand für die Webadmins und Webentwickler.

Manchmal reicht aber bereits eine kleine Umstellung wie die Salt-Routine beim MD5-Hash aus. Viel schwieriger gestaltet sich das Beheben von Sicherheitsproblemen, die beim Shared-Hosting entstehen können, wenn der Hoster Lücken offen lässt. Für wen ein dedizierter Server nicht infrage kommt, der sollte zumindest seinen Webspace so konfigurieren, dass dieser nur so wenig wie möglich über die Verzeichnisse und die sich darin befindlichen Dateien preisgibt.

Zugriffsrechte für Apache 2 mit suPHP 0.7.1

Mittels suPHP in der aktuellen Version 0.7.1 lassen sich PHP-Skripte mit den Zugriffsrechten ihrer Benutzer ausführen. Bei suPHP handelt es sich um ein kleines in C++ geschriebenes Programm.

Es besteht aus einem Apache-Modul (mod_suphp) und einem setuid-Root-Binärprogramm namens suphp, welches vom Apache-Modul aufgerufen wird, um die User-ID (uid) des Prozesses anzupassen, die den PHP-Interpreter aufruft. Der Versuch, suPHP mit Apache 1.3.28 zu verwenden, ist leider zwecklos, da der Apache-Core einen Bug hat, der CGI-Prozesse nicht korrekt beendet.

Bereits mit Apache 1.3.29 tritt dieser Fehler nicht mehr auf. suPHP 0.7.1 sollte aber idealerweise mit Apache 2.0 oder höher zum Einsatz kommen. Neuerdings wird auch Apache 2.2 unterstützt.

MySQL- und mysqli-Erweiterung für PHP 5

Möchte man Probleme bei der PHP- und MySQL/mysqli-Programmierung vermeiden, so empfiehlt es sich, nur solche MySQL-Client-API-Versionen zu verwenden, die auch zur jeweiligen MySQL-Server-Version passen.

Bei den Unix-Systemen ist diese Anforderung in der Regel erfüllt. Nur Windows-Benutzer müssen darauf gesondert achten. Man sollte also die MySQL Server 5.0.27 unbedingt nur mit der MySQL-Client-API Version 5.0.27 zusammen verwenden (), aber keinesfalls mit der Version 4.1.7, die man von php.net beziehen könnte.Windows-Anwender können die MySQL- und mysqli-Erweiterungen für PHP am besten direkt von der MySQL-Webseite (statt von der PHP-Webseite) herunterladen. Die ZIP-Archive beinhalten die zurzeit aktuellsten mysql- und mysqli-Erweiterungen für PHP 5.2. Sie unterstützen den MySQL-Server in den Versionen 4.1.21 und 5.0.27 und basieren auf den offiziellen Quelltexten von .

Es bietet sich an, die Windows-Versionen von MySQL/mysqli zurzeit unbedingt von der -Webseite zu beziehen, statt von der logisch näher liegenden -Webseite, weil die angebotenen MySQL-Client-Bibliotheken die neuesten Bugfixes enthalten und außerdem auch die neuen MySQL-Server-Versionen 4.1.21 und 5.0.27 unterstützen.

Die PHP 5.1-Distribution, die zurzeit auf php.net verfügbar ist, wurde beim Kompilieren mit einer alten MySQL-Client-API-Bibliothek gelinkt und MySQL- und mysqli-Erweiterungen basieren zurzeit leider auf der MySQL-Client-API-Bibliothek Version 4.1.7.

Eine fertig kompilierte Version der MySQL- und mysqli-Erweiterungen für PHP unter Windows findet man hier. Fertig kompilierte Packages für andere Unice wie Mac OS X, Linux und Solaris werden nicht angeboten, man kann sie sich aber sehr leicht selbst kompilieren, wenn man die GNU gcc-Entwicklungsumgebung installiert hat.

Mac-OS-X-Entwickler sollten, wie sonst auch üblich, die aktuelle Apple Xcode-Umgebung installieren, die unter anderem auf der Mac OS X 10.5-DVD mitgeliefert wird.

Weitere Informationen zur Installation von PHP und MySQL/mysqli unter dem Mac OS X-Client und -Server findet man hier und hier.