SQL-Injection

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

Was man unter lückenloser Sicherheit verstehen möchte, ist natürlich höchst relativ. Auch wenn MySQL und PHP fachgerecht installiert wurden, so kann dennoch zum Beispiel eine fehlerhafte Apache-Konfiguration die ganze Sicherheit komplett infrage stellen.

Liegt eine Include-Datei innerhalb des Dokumenten-Verzeichnisses des Webservers, wie es bei Shared-Hosting oft der Fall ist, so ist die Sicherheit leicht zu kompromittieren. Bei einem dedizierten Server kann man Include-Dateien außerhalb des Dokumenten-Verzeichnisses von Apache 2 ablegen, damit sie nicht über das Internet zugänglich sind.

Parameterübergabe

Skripte, die bereits auf dem Server liegen und Parameter über die URL entgegennehmen, bieten sich für SQL-Injections nahezu an. Werden auf einem Webserver etwa CGI-Skripte zum Zugriff auf eine SQL-Datenbank genutzt, können sie oft ohne Weiteres missbraucht werden. Ein Aufruf eines CGI-Skriptes zum Auslesen eines Datenbankelementes wie diesem:

http://www.servername.de/cgi-bin/
find.cgi?ID=54

resultiert dann etwa im Absenden eines SQL-Befehls wie diesem:

SELECT author, subject, text FROM
artikel WHERE ID=54

Ein Angreifer kann über das URL-Feld zusätzliche Parameter an das Skript übergeben, um dem SQL-Parser bösartigen Code unterzuschieben. Zum Beispiel aus diesem modifizierten Aufruf:

http://www.servername.de/cgi-bin/
find.cgi?ID=54;UPDATE+USER+SET+TYPE="admin"+WHERE+ID=13

ergibt sich der folgende SQL-Befehl - mit weitreichenden Folgen für die Integrität der Datenbank:

SELECT author, subject, text FROM
artikel WHERE ID=54; UPDATE USER SET TYPE="admin" WHERE ID=13

Doch es geht sogar noch weiter. Wenn man eine SQL-Injection ins Spiel bringt, kann man leider mehr Unheil anrichten als lediglich ein paar Variablen zu verändern, bestehende Benutzer zu löschen oder neue Benutzer einzurichten. Ein Angreifer kann im extremsten Fall unter Windows sogar die Festplatte formatieren, wenn er es darauf anlegt.

Ein beabsichtigter Aufruf eines an sich harmlosen Skriptes, welches den Parameter keyword entgegennimmt:

http://www.servername.de/
search.aspx?keyword=sql
SELECT url, title FROM myindex WHERE
keyword LIKE '%sql%'

kann wie folgt modifiziert werden:

http://www.servername.de/search.asp
x?keyword=sql'+;GO+EXEC+cmdshell('format+C')+-- SELECT url, title FROM myindex WHERE keyword LIKE '%sql' ;GO EXEC cmdshell('format C') --%'

Wie auch in dem ersten Beispiel wird der ursprünglichen Abfrage noch ein weiterer Befehl angehängt. Die zwei Bindestriche sind insofern trickreich, weil auf diese Weise das Hochkomma als Rest der eigentlichen Abfrage auskommentiert wird.

Der Datenbankadministrator merkt das spätestens jetzt, wenn die Festplatte wie aus heiterem Himmel formatiert wird. Das Potenzial von SQL-Injections, Unheil anzurichten, darf also wirklich nicht auf die leichte Schulter genommen werden.

Offengelegter Quelltext

Eine besonders wichtige Sicherheitslücke stellen Quelltexte dar, die im Web-Browser im Klartext dargestellt werden können. Das betrifft sowohl Javascript-Code, der Formulareingaben verarbeitet, als auch etwaige Fehlermeldungen des PHP-Interpreters.Wer diese Aspekte der Webserversicherheit ignoriert, lädt Angreifer ein. Es ist ungefähr so als ob man sich vor der Abreise um die Absicherung kleiner Fenster auf dem Dach eines Einfamilienhauses gekümmert und dann den Schlüssel zur Haustüre im Erdgeschoss im Schloss stecken gelassen hätte.Das Problem mit offengelegtem Quelltext betrifft unter anderem Include-Dateien, die im Dokumentenverzeichnis abgelegt wurden. Apache weiß leider nicht, was und wie wichtig eine .inc-Datei wirklich ist. Den inc-Dateien wird von Apache leider standardmäßig nur der unpassende DefaultType text/plain zugewiesen. Als Folge daraus sind Include-Dateien leider im Webbrowser im Klartext für jeden zu sehen.

Sicherheit

© Archiv

suPHP ermöglicht das Ausführen von PHP-Skripten mit granulierten Zugriffsrechten.

Abhilfe schafft man hier, indem man die Include-Dateien in einem Verzeichnis ablegt, welches aus dem Web nicht zugänglich ist. Ist es aus technischen Gründen nicht möglich, wie es oft bei Shared-Hosting der Fall ist, so kann man sich durch das Anpassen der Apache-Konfiguration behelfen:

Mehr zum Thema

HTML5: Quick Reference Guide
Ratgeber: "HTML5"

Die wichtigsten Tags auf einen Blick: In unserem praktischen Arbeitsblatt finden Sie einen wertvollen Begleiter für die Umstellung Ihrer Webprojekte…
internet, webdesign, google, content, ranking, seo, suchmaschine
Ratgeber: Urheberrecht

Einzigartige Inhalte bieten Lesern Mehrwert und sind ein wichtiges Qualitätsmerkmal. Ärgerlich, wenn sich jemand durch Kopieren an fremden…
Die besten HTML5-Tipps
Neue Tipps & Tricks für blitz.io

Wer die Leistung einer Applikation ermitteln möchte, braucht keine Skripte zu schreiben, sondern kann einen der zahlreichen Online-Dienste…
image.jpg
Ratgeber: Webentwicklung

Die clientseitige Javascript-Entwicklung bietet fast keine Entwicklungsumgebungen und auch keine vernünftigen Werkzeuge zur Fehlersuche. Eine der…
internet, webdesign, meteor, webapplikationen
Ratgeber

Mit Meteor sollen Entwickler in kurzer Zeit Umgebungen für Webapplikationen erstellen können, ohne sich um lästige Details kümmern zu müssen. Wir…