scheible.it - Tobias Scheible
Strand mir Felsen und Brandung
Freitag, 09. September 2016
0 Kommentare

Filterung von Benutzereingaben mit PHP

Es ist ein weit verbreiteter Irrtum, dass Benutzereingaben automatisiert und pauschal mit einer Funktion in PHP gefiltert werden können. Die effektivste Maßnahme, um Code Injections zu vermeiden, ist, die geeignete Filterung für die richtige Eingabe zu verwenden.

PHP hatte früher selbst einmal einen pauschalen Ansatz verfolgt, die Magic Quotes. Magic Quotes ist ein Prozess, der eingehende Daten automatisch an das PHP-Skript weiterleitet und mit „magischen“ Anführungszeichen Steuerungszeichen markiert. Diese Funktion ist inzwischen von PHP als veraltet markiert und wird in zukünftigen Versionen entfernt werden.

Allgemein sind Filterungen nie ein guter Weg, da hier eine Liste mit nicht erlaubten Zeichen durchgegangen und überprüft wird, ob diese in einem zu untersuchenden String vorhanden sind. Hierbei ist das Problem, dass vielleicht nicht alle Zeichenkombinationen beachtet wurden und jede Art der Verarbeitung unterschiedlicher Zeichen erlaubt oder verbietet wurde.

Um einen Angriff durch bösartigen Code zu vermeiden, sollten stattdessen alle Daten aus externen Quellen durch die dafür passenden Funktionen verarbeitet werden. Dadurch erfolgt eine Überprüfung gemäß der Syntax der entsprechenden Sprache. Wenn beispielsweise ein String in eine MySQL Abfrage eingebunden wird, müssen die Zeichen mit der dafür von MySQL bereitgestellten Funktion mysqli_real_escape_string verarbeitet werden. Oder wenn eine andere Datenbank verwendet wird, dann mit der jeweils dafür vorgesehenen Funktion.

Ein weiteres Beispiel ist die Verarbeitung von HTML in PHP. Wenn ein String in HTML einbettet wird, müssen diese Zeichen mit der PHP-Funktion htmlspecialchars verarbeitet werden. Das bedeutet eigentlich, dass jeder einzelne echo oder print Befehl htmlspecialchars verwendet werden muss. Das nächste Beispiel ist die Verarbeitung von Benutzerdaten bei Shell-Befehlen. Wenn hier ein externer String bzw. ein Argument in einem Befehl eingebettet und mit exec aufrufen wird, dann müssen die Eingaben mit escapeshellcmd und escapeshellarg verarbeitet werden.

Diese Systematik kann für alle anderen Verarbeitungsmethoden weitergesponnen werden. Wichtig ist auch daran zu denken, dass dieses Thema nicht nur für Benutzereingaben relevant ist, sondern für jede Art von externen Daten. Dazu zählen zum Beispiel auch API Aufrufe, Texterkennung, Barcodescanner und so weiter. Jede Verarbeitung von externen Daten muss also entsprechend abgesichert werden.

Über Tobias Scheible

Tobias Scheible

Ich arbeite als wissenschaftlicher Mitarbeiter an der Hochschule Albstadt-Sigmaringen. Dort bin ich in den Bereichen IT-Sicherheit und IT-Forensik tätig. Darüber hinaus beschäftige ich mich seit 2001 mit der Planung und Umsetzung von individuellen Web-Anwendungen. Mein Wissen teile ich gerne hier in meinem Blog, bei Vorträgen und auf Workshops.

Alle Blog-Artikel Über mich Facebook Twitter Xing

Kommentare

Es wurde noch kein Kommentar abgegeben.

Schreibe einen Kommentar!

Hilfe zum Kommentieren

Um kommentieren zu können, geben sie bitte mindestens ihren Namen und ihre E-Mail-Adresse an. Bitte nutzen Sie die Kommentarfunktion nicht dazu, andere zu beleidigen oder Spam zu verbreiten. Trolle und Spammer sind hier unerwünscht! Unangemessene Kommentare, die zum Beispiel gegen geltendes Recht verstoßen oder eine Gefährdung anderer Besucher darstellen, werden gelöscht oder angepasst.

Name: Ihr Name, der oberhalb des Kommentars steht, gerne auch Ihren echten Namen, das erleichtert die Kommunikation für alle. Sollte ein Spam-Keyword als Name verwendet werden, kann dieses entfernt oder korrigiert werden.

E-Mail: Ihre E-Mail Adresse dient zur Identifizierung weiterer Kommentare und sie haben die Möglichkeit, ein Avatar-Bild zu verwenden. Dazu müssen Sie mit Ihrer E-Mail Adresse bei Gravatar angemeldet sein. Die E-Mail Adresse wird natürlich nicht veröffentlicht und nicht weitergegeben.

Website: Hier können Sie ihren eigenen Blog bzw. ihre eigene Website eintragen, dadurch wird Ihr Name und Ihr Avatar-Bild verlinkt. Werden rein kommerzielle Angebote offensichtlich beworben, setze ich den Link auf nofollow und unangemessene werden einfach entfernt.

Erlaubte HTML-Tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <hr> <big> <small> <sub> <sup> <u>

Ihre E-Mailadresse wird nicht veröffentlicht. Mit dem Absenden anerkennen Sie die Datenschutzerklärung des Blogs.

nach oben