Injection
als Präsentation ▻Die OWASP beschreibt dieses Problem allgemein so:
Injection-Schwachstellen tauchen auf, wenn eine Anwendung nicht vertrauenswürdige Daten an einen Interpreter weiterleitet. Injection Schwachstellen sind weit verbreitet, besonders in altem Code; sie finden sich in SQL-, LDAP- und XPath-Anfragen, Systembefehlen, Programm-parametern usw.
Wir haben im Kapitel PHP MYSQL 2 → Löschen schon die SQL Injection behandelt. Zur Verhinderung von SQL-Injection steht uns in PHP die Prepared Statements zur Verfügung:
Php Code Prepared Statements verhindern SQL Injection
$query = $dbh->prepare("SELECT * FROM users WHERE id=?"); $query->execute(array( $_GET['pid'] ) );
Mit dem prepare
wird das SQL-Statement bereits vor-kompiliert. Die Daten,
die als Input vom User/der Userin kommen werden mit execute
an die Datenbank
übergeben, können aber nicht mehr als SQL interpretiert werden.
Prepared Statement mit benannten Platzhaltern
Eine zweite Schreibweise für prepared Statement ist noch besser lesbar: dabei werden statt der Fragezeichen benannte Platzhalter verwendet:
Php Code Prepared Statements mit benanntem
$stm = $dbh->prepare ( "SELECT * FROM USERS WHERE USERNAME LIKE :name" ); $stm->bindParam(":name", $_POST['name'] ); $stm->execute();
OWASP Empfehlungen
Die OWASP empfiehlt:
- Den Interpreter gänzlich vermeiden, oder
- Eine Schnittstelle benutzen es dem Interpreter erlaubt zwischen Code und Daten zu unterscheiden (z.B., prepared statements, stored procedures in der Datenbank), oder
- Den Input von der Userin/dem User geeignet codieren bevor er an den Interpreter weiter gegeben wird
Im dritten und schlechtesten Fall ist weiter zu beachten:
- Bei der Validierung des Inputs immer ein ‘white list’ verwenden, also nur Zeichen erlauben die harmlos sind (auf der “weissen Liste” stehen), alle anderen verwerfen
Unabhängig von den oben genannten Punkt gilt noch die Empfehlung:
- Der Web-Applikation nur minimale Zugriffsrechte zur Datenbank gewähren. Damit kann ein eventueller Schaden durch gelungen Injection minimiert werden.
Siehe auch SQL Injection Prevention Cheat Sheet
Kapitel
- Das Web Und Html
- Css
- Css Layout
- Urls
- Formulare
- Javascript Dom
- Jquery
- Kommandozeile
- Git
- Http
- Php Vorbereitung
- Php
- Php Db Lesen
- Session
- Php Db Schreiben
- Php Db Optimierung
- Grafik
- Javascript
- Applied Jquery And Css
- Json
- Xml
- Security
- Injection
- Authentifizierung und Session-Management
- Cross Site Scripting (XSS)
- Unsichere direkte Objektreferenzen
- Sicherheitsrelevante Fehlkonfiguration
- Verlust der Vertraulichkeit sensibler Daten
- Fehlerhafte Autorisierung auf Anwendungsebene
- Cross-Site Request Forgery (CSRF)
- Nutzung von Komponenten mit bekannten Schwachstellen
- Ungeprüfte Um- und Weiterleitungen
- Wordpress
- Apache
- Advanced Javascript
- Qualitaet