![]() | ||||||||||||||||||||
| • Startseite • Entstehungsgeschichte • Konzept • Screenshots • Demo • Video-Anleitungen • Download • Systemanforderungen • Nutzungsrecht • Installation • Erweiterung bestellen • Lizenzbedingungen • Newsletter |
SQL-Injection im Gästebuch vermeiden
SQL-Injection im Gästebuch vermeiden gehört zu den ersten Sicherheitsaufgaben, sobald Sie auf Ihrer Homepage Eingaben von Besuchern annehmen. Jeder Name, jede Nachricht und jede E-Mail-Adresse aus einem Formular landet früher oder später in einer Datenbank, und genau auf diesem Weg lauert das Risiko, wenn die Daten ungeprüft weiterverarbeitet werden. Sie müssen kein Datenbank-Profi sein, um das Prinzip zu verstehen. Dieser Artikel erklärt anschaulich, was hinter einer SQL-Injection steckt, warum gerade ein offenes Gästebuch ein beliebtes Ziel ist und wie Sie sich mit überschaubarem Aufwand schützen. Ein konkretes Code-Beispiel zeigt zusätzlich, wie der Unterschied zwischen unsicherem und sicherem Code in der Praxis aussieht. ![]() Was ist eine SQL-Injection?SQL ist die Sprache, mit der ein Programm mit einer Datenbank kommuniziert. Sendet ein Besucher einen Eintrag ab, baut das Script im Hintergrund einen SQL-Befehl, der sinngemäß lautet: "Speichere diesen Namen und diese Nachricht in der Tabelle." Eine SQL-Injection liegt vor, wenn ein Angreifer in das Eingabefeld nicht nur harmlosen Text schreibt, sondern eigenen SQL-Code einschleust. Das Problem entsteht, sobald das Script die Eingabe ungefiltert in den Datenbankbefehl einbaut. Dann kann die Datenbank nicht mehr zwischen eigentlichem Inhalt und Kommando unterscheiden. Ein klassisches Beispiel ist die Eingabe Warum ein Gästebuch ein typisches Ziel istEin Gästebuch lebt davon, dass jeder mitschreiben darf. Genau das macht es interessant für automatisierte Angriffe, die das Internet nach offenen Formularen durchsuchen. Diese Eigenschaften machen ein Gästebuch besonders attraktiv:
Das heißt nicht, dass ein Gästebuch grundsätzlich unsicher wäre. Es heißt nur, dass die Verarbeitung der Eingaben mit Sorgfalt programmiert sein muss. Wie Sie SQL-Injection im Gästebuch vermeidenDer wirksamste Schutz besteht darin, Benutzereingaben und Datenbankbefehle strikt zu trennen. Die Datenbank soll jederzeit wissen, was Befehl ist und was reiner Inhalt. Die folgende Übersicht zeigt die wichtigsten Schutzmaßnahmen und ihre Wirkung:
Die mit Abstand wichtigste Technik sind die sogenannten Prepared Statements, auch parametrisierte Abfragen genannt. Dabei erhält die Datenbank zuerst den Befehl mit Platzhaltern, etwa "Speichere Name und Nachricht an dieser und jener Stelle". Erst danach werden die tatsächlichen Werte eingesetzt. Weil die Struktur des Befehls bereits feststeht, kann eingeschleuster Code nichts mehr ausrichten und wird einfach als harmloser Text abgelegt. Unsicher gegen sicher: ein Code-BeispielDamit das greifbar wird, hier derselbe Vorgang einmal falsch und einmal richtig in PHP. Die unsichere Variante setzt die Eingabe direkt in den Befehl ein (String-Verkettung), die sichere nutzt PDO mit Platzhaltern: PHP: unsicher und sicher im Vergleich
Statt PDO können Sie auch die Erweiterung mysqli mit vorbereiteten Anweisungen verwenden. Beide trennen Befehl und Daten zuverlässig. Wer tiefer einsteigen möchte, findet bei OWASP, einer anerkannten Organisation für Anwendungssicherheit, ausführliche Empfehlungen unter dem Stichwort "SQL Injection Prevention Cheat Sheet". Nicht nur die Datenbank: sichere Anzeige (XSS)Prepared Statements schützen den Weg in die Datenbank. Genauso wichtig ist der Weg zurück, also die Anzeige der Einträge im Browser. Speichert jemand HTML- oder JavaScript-Code in einer Nachricht und Sie geben ihn ungefiltert aus, kann er im Browser anderer Besucher ausgeführt werden. Das nennt man Cross-Site-Scripting (XSS). In PHP entschärfen Sie das mit Was Sie selbst beachten solltenWenn Sie ein fertiges Gästebuch-Script einsetzen, müssen Sie diese Technik in der Regel nicht selbst programmieren. Ein paar Punkte sollten Sie trotzdem im Blick behalten:
Sichere Eingaben als GrundprinzipHinter dem Schutz vor SQL-Injection steht eine einfache Regel: Trauen Sie keiner Eingabe von außen blind. Jede Information, die ein Besucher absendet, gilt als potenziell unsicher und sollte geprüft werden, bevor sie in die Datenbank gelangt oder auf der Seite erscheint. Diese Haltung deckt beide Risiken ab, die Manipulation der Datenbank ebenso wie die unsichere Anzeige. Aus eigener Entwicklungspraxis: Das Gästebuch-Script von gaestebuch-script.de nutzt kein PDO, sondern eine eigene Datenbankschicht auf Basis von mysqli. Auch dort stehen im Befehl Platzhalter („?“). Die Schicht setzt jeden Wert aber selbst maskiert ein, statt ihn getrennt vom Befehl an die Datenbank zu schicken. Ein echtes Prepared Statement ist das nicht. Bei gängigen Zeichensätzen wie utf8mb4 ist diese Maskierung trotzdem wirksam, eingeschleuster Code bleibt reiner Text. Außerdem entfernt das Script HTML schon beim Speichern und maskiert Name, E-Mail und Betreff bei der Anzeige. So sind beide Wege abgesichert, ohne dass Sie sich selbst in die Technik einarbeiten müssen. Checkliste zum MitnehmenWenn Sie nur eine Sache aus diesem Artikel mitnehmen, dann diese Liste. Sie fasst zusammen, worauf es beim Schutz vor SQL-Injection praktisch ankommt:
Häufige FragenWie erkennt man eine SQL-Injection? Anzeichen sind ungewöhnliche Datenbankfehler nach einem Formularversand, plötzlich veränderte oder fehlende Einträge sowie Eingaben mit verdächtigen Zeichenfolgen wie einfachen Anführungszeichen, Reicht htmlspecialchars allein gegen SQL-Injection? Nein. Was ist der Unterschied zwischen PDO und mysqli? Beides sind PHP-Schnittstellen zur Datenbank, die parametrisierte Abfragen unterstützen. PDO arbeitet mit verschiedenen Datenbanksystemen, mysqli ist auf MySQL und MariaDB ausgerichtet. Für die Sicherheit gegen SQL-Injection ist beides gleichwertig, solange Sie Platzhalter statt String-Verkettung nutzen. Muss ich als Einsteiger den Schutz selbst programmieren? Nein. Ein gepflegtes Gästebuch-Script bringt diese Absicherung bereits mit. Ihre Aufgabe ist es, ein solches Script auszuwählen, es aktuell zu halten und die Zugangsdaten sicher zu verwalten. Verwandte ThemenDiese Beiträge führen das Thema weiter und helfen Ihnen beim nächsten Schritt: | |||||||||||||||||||
| AGB - Kontakt - Impressum |