Kapitel 27. Datenbank - Sicherheit
Heutzutage sind Datenbanken die Hauptkomponenten jeder Webbasierten
Applikation, aufgrund welcher Websites verschiedene dynamische Inhalte
anbieten können. Nachdem heikle oder geheime Informationen in solch einer
Datenbank gespeichert werden können, sollten Sie deren Schutz ernsthaft
bedenken.
Um Informationen zu bekommen oder zu speichern, müssen Sie eine legitime
Abfrage senden, das Ergebnis holen, und die Verbindung schließen.
Heutzutage ist die allgemein verwendete Abfragesprache für solche
Interaktionen die Structured Query Language (SQL). Sehen Sie, wie sich ein
Angreifer an einer SQL
Abfrage zu schaffen machen kann.
Sie werden merken, dass PHP Ihre Datenbank alleine nicht schützen kann.
Die folgenden Abschnitte sind eine Einführung in die Grundlagen, wie man
innerhalb von PHP Skripten auf Datenbanken zugreift und diese manipuliert.
Denken Sie an diese einfache Regel: tief gestaffelte Verteidigung. Je mehr
Platz Sie den Maßnahmen zum Schutz Ihrer Datenbank geben, desto geringer
ist die Wahrscheinlichkeit, dass ein Angreifer Erfolg hat, und gespeicherte
Geheiminformationen aufdeckt oder missbraucht. Gutes Design des
Datenbankschemas und die Applikation wird mit Ihren größten Befürchtungen
fertig.
Der erste Schritt liegt immer im Erstellen der Datenbank, außer Sie wollen
eine bereits existierende Dritter verwenden. Ist eine Datenbank erstellt,
ist sie einem Eigentümer zugewiesen, welcher das Kommando zum Erstellen
ausgeführt hat. Gewöhnlich kann nur der Eigentümer (oder ein Superuser)
alles mit den Objekten in dieser Datenbank machen, und um anderen Benutzern
die Verwendung zu erlauben, müssen Rechte vergeben werden.
Applikationen sollten sich mit der Datenbank nie als deren Eigentümer
oder als ein Superuser verbinden, da diese Benutzer jede gewollte Abfrage
ausführen können, um z.B. das Schema zu modifizieren (z.B. Tabellen
löschen) oder den gesamten Inhalt löschen.
Sie können verschiedene Datenbanknutzer mit sehr limitierten Rechten auf
Datenbankobjekte für jeden Aspekt Ihrer Applikation anlegen. Nur die
wirklich benötigten Rechte sollten gewährt werden, und vermeiden Sie, dass
der gleiche Benutzer in verschiedenen Anwendungsfällen mit der Datenbank
interagieren kann. Das heißt, dass Eindringlinge, welche unter Verwendung
einer dieser Referenzen Zugriff auf Ihre Datenbank erlangt haben, nur so
viele Änderungen durchführen können, wie es Ihre Applikation kann.
Implementieren Sie nicht alle Geschäftslogik in die Webapplikation (z.B.
Ihr Skript), sondern tun Sie das im Datenbankschema unter Verwendung von
Sichten, Triggern, oder Regeln. Wenn sich das System entwickelt, werden
neu zu öffnende Ports zu der Datenbank vorgesehen, und Sie müssen die
Logik in jedem Datenbank-Client neu implementieren. Überdies können
Trigger verwendet werden, um transparent und automatisch mit Feldern
umzugehen, welche beim debuggen Ihrer Applikation oder beim
Zurückverfolgen von Transaktionen oft einen Einblick gewähren.