Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort des Fachgutachters
Vorwort
1 Einleitung
2 Einführung in eZ Components
3 Die Applikationsbasis
4 Fehlerbehandlung und Debugging
5 Konfiguration
6 Datenbankanbindung
7 ORM mit PersistentObject
8 Template
9 Übersetzung
10 Benutzereingaben validieren
11 Authentifizierung
12 Bildverarbeitung
13 Archive und Dateien
14 Mail
15 Logging
16 Diagramme
17 Feeds und Caching
18 Setup
A Inhalt der Buch-CD
Stichwort
Download: - ZIP, ca. 2,7 MB
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> /eZ Components | vor >>
eZ Components von Tobias Schlitt, Kore Nordmann Das Entwickler-Handbuch
eZ Components geb., mit CD 454 S., 39,90 Euro Galileo Computing ISBN 978-3-8362-1073-7 |
| 10 Benutzereingaben validieren
|  | 10.1 Sicherheitsprobleme
|  |  | 10.1.1 Benutzereingaben in Desktop-Applikationen
|  |  | 10.1.2 Betrachtung des Webbereichs
|  |  | 10.1.3 PHP-Sicherheit
|  | 10.2 Lösung mit UserInput
|  |  | 10.2.1 Formulare definieren
|  |  | 10.2.2 Sicherer Zugriff auf Formularvariablen
|  |  | 10.2.3 Ein weiteres Beispiel
|  | 10.3 Erweiterte Möglichkeiten
|  | 10.4 Fazit
Die UserInput-Komponente bietet eine objektorientierte Schnittstelle zur Validierung und Entwertung von Benutzereingaben. # 10 Benutzereingaben validieren Gerade im Web- ist der Umgang mit Benutzereingaben eine sehr sensible Stelle einer Applikation in Bezug auf Sicherheitsaspekte. Dieses Kapitel zeigt Ihnen, welche Gefahren lauern und wie Sie ihnen mit Hilfe der UserInput-Komponente effektiv entgegenwirken. Ein sicherheitstechnischer Aspekt wird in diesem Kapitel allerdings nicht beleuchtet: Das Vermeiden potentieller SQL-Injektionen, also das Einschleusen von manipulierten SQL-Abfragen, wurde bereits in Kapitel 6, »Datenbankanbindung«, diskutiert. ## 10.1 Sicherheitsprobleme Benutzereingaben gleich welcher Art besitzen potentiell zwei Eigenschaften, die verheerende Auswirkungen haben können: Zum einen können sie fehlerhaft sein, zum anderen können sie unter bestimmten Umständen ausgenutzt werden, um dem System Schaden zuzufügen. Fehlerhaft bedeutet hier, dass die Applikation ein bestimmtes Format für die Benutzereingabe fordert, dieses Format jedoch vom Benutzer nicht eingehalten wurde, womit die Eingabe nicht verwertbar ist. Eine schadhafte Eingabe resultiert meist daraus, dass das erwartete Format von der Applikation nicht vollständig validiert wurde und somit fehlerhafte Eingaben zur Verarbeitung vordringen. Ein potentieller Angreifer versucht Eingaben so zu formatieren, dass die Validierung des Programms die Daten durchlässt und Elemente darin unterzubringen, welche im System zu Problemen führen. Sie sehen, das Problem schadhafter Eingaben baut direkt auf dem Problem mangelnder Validierung auf und hängt im größten Teil der Fälle direkt davon ab. Im Folgenden werden wir die Sicherheitsaspekte verschiedener Applikationstypen genauer beleuchten. Dabei sollen der Unterschied zwischen herkömmlichen Anwendungen und Webapplikationen herausgearbeitet und einige Details aus der PHP-Welt vorgestellt werden. ### 10.1.1 Benutzereingaben in Desktop-Applikationen In Desktop-Applikationen, also klassischen GUI-Programmen, stellt die Validierung von Benutzereingaben ein sehr kleines Problem dar. Zum einen steht eine Installation solcher Anwendungen nur einer kleinen Benutzergruppe zur Verfügung, was die Anzahl potentieller Angreifer stark reduziert. Zum anderen greifen GUI-Applikationen sehr häufig nur auf lokale Daten zu, sodass die Menge in Frage kommender Angriffsziele sehr klein ist. Greift eine GUI-Applikation auf verteilte Daten zu, so basiert dieser Zugriff häufig auf wenig verbreiteten Protokollen, und die Menge sensibler Daten, auf die zugegriffen wird, ist vergleichsweise gering. Weiter hängt in der GUI-Programmierung die Darstellung von Formularen eng mit deren Verarbeitung zusammen. Zwar ist die strikte Trennung im Code gebräuchlich, jedoch verläuft der physische Weg der Daten zwischen Interface und Verarbeitung lediglich durch den Hauptspeicher und nicht über ein Netzwerk. Integrierte Widget-Toolkits (wie zum Beispiel Qt oder GTK) bringen Validierungsmechanismen von Haus aus mit und verfügen über eine Vielzahl von direkt verwendbaren Formularelementen, welche die Eingabe invalider Daten erst gar nicht erlauben. Aus diesem Grund ist bei GUI-geprägten Entwicklern die Sensibilität in Bezug auf die Validierung von Benutzereingaben häufig nur gering, was allerdings im Webumfeld fatale Folgen haben kann. Nachdem nun einige Sicherheitsaspekte bei Desktop-Anwendungen beleuchtet wurden, werden Sie im Folgenden sehen, wie grundlegend sich Webapplikationen davon unterschieden. ### 10.1.2 Betrachtung des Webbereichs Im Webumfeld, ganz im Gegensatz zum soeben beleuchteten Bereich der GUI-Programmierung, liegen viele Faktoren vor, die eine strikte Validierung von Benutzereingaben unumgänglich machen. Im Internet verfügbare Anwendungen sind im Normalfall allen Internetbenutzern zugänglich. Auch wenn ein Log-in vor dem Zugriff auf Features einer Applikation schützt, sind auch die Anmeldung und die Überprüfung des Anmeldestatus eines Benutzers stets mit Benutzereingaben verbunden. Genau diese Bereiche stehen grundsätzlich allen Internetbenutzern offen und können potentiell immer Ziele von Angriffen sein. Es sei denn, dass der Zugriff auf den Zugriff aus definierten IP-Bereichen, über ein VPN oder ähnliche Mechanismen begrenzt ist. Sämtliche Kommunikation zwischen Benutzer und Anwendung findet über das Netzwerk statt und ist somit wesentlich einfacher manipulierbar als die Kommunikation im lokalen Speicher. Verschärft wird diese Möglichkeit noch durch die Simplizität des HTTP-Protokolls. Selbst für ungeübte Angreifer ist es einfach, bereits vom Browser – zum Beispiel durch ein ECMAScript – validierte Daten auf dem Weg zum Server zu manipulieren. Die im Bereich über GUI-Applikationen erwähnte enge Kopplung von Formular und Verarbeitung ist hier in keiner Weise vorhanden. Die Interface-Möglichkeiten von HTML-Formularen sind nur sehr rudimentär, verglichen mit den Möglichkeiten auf dem Desktop. Auch ausgefeilte Widget-Toolkits für Webanwendungen, die mit Hilfe von ECMAScript das Komfort-Manko von HTML-Formularen zu beheben versuchen und die Validierung der Daten direkt integrieren, helfen aus genanntem Grund nicht weiter. Letztendlich bedeutet dies, dass jede Webanwendung mit einem einfachen Leitprinzip im Hinterkopf des Programmierers entwickelt werden sollte: »Benutzereingaben sind böse.« Jede Eingabe muss strikten Validierungen unterliegen und, falls das gewünschte Datenformat die Möglichkeit schadhafter Eingaben nicht vollständig ausschließt, entsprechend ihres Verwendungszwecks entwertet werden. ### 10.1.3 PHP-Sicherheit Natürlich findet PHP mittlerweile auch außerhalb des Webs reichlich Anwendung. Jedoch zählt der Webbereich zu den sensibelsten Bereichen, was Sicherheitsaspekte angeht. Aus diesem Grund werden wir in diesem Abschnitt kurz beschreiben, an welchen Stellen das größte Gefahrenpotential durch Benutzereingaben in PHP-Webanwendungen lauert. Weniger bekannt ist, dass auch alle weiteren vom PHP-Interpreter bereitgestellten super-globalen Arrays Daten enthalten können, welche der Manipulation durch den Benutzer einer Anwendung ausgesetzt sind. So sind viele Daten des $_SERVER-Arrays ohne große Mühe vom Benutzer manipulierbar. Dies gilt zum Beispiel für den Wert $_SERVER['PHP_SELF'], der eine Referenz auf die URL des aktuelle Programms enthält. Hier lassen sich zum Beispiel XSS-Angriffe einschleusen, indem die URL im Browser geändert wird, ohne das auf dem Webserver angepeilte Skript zu ändern. Allerdings ist es nicht Ziel dieses Buches, detailliert über Taktiken zur Ausnutzung von Sicherheitslücken aufzuklären. Da einige Variablen aus $_SERVER auch in $_ENV übertragen werden, gelten die gleichen Bedenken gegenüber dieser super-globalen Variablen. Die UserInput-Komponente bietet Ihnen Unterstützung beim sicheren Zugriff auf alle hier benannten Variablen und die potentiellen Sicherheitsrisiken, die mit den enthaltenen Daten verbunden sein können. Natürlich kann dies nur funktionieren, wenn Sie die Komponente konsequent und gewissenhaft einsetzen, denn kein Programm kann automatisch ermitteln, wie Benutzereingaben zu validieren und entwerten sind. Sie sollten also das Thema der Absicherung Ihrer Applikation nie auf die leichte Schulter nehmen, auch dann nicht, wenn Sie UserInput oder andere Mechanismen verwenden. Eine gute Abhandlung in deutscher Sprache zum Thema Sicherheit in PHP-Applikationen finden Sie zum Beispiel in dem PHP-Sicherheits-Buch. [Christopher Kunz, Peter Prochaska, Stefan Essner, PHP-Sicherheit, PHP/MySQL-Anwendungen sicher programmieren, dpunkt, Heidelberg 2007. Außerdem empfehlenswert ist Ilia Alshanetsky et al., PHP|Architect’s Guide to PHP Security; php|architect nanobooks, Toronto 2007. Beide Werke wurden von anerkannten Sicherheitsexperten der PHP-Community verfasst. ] ### Ihr Kommentar Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück | <top> | vor >>
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Buchempfehlungen
| PHP 5.3 und MySQL 5.1
| Besser PHP programmieren
| Webshops mit Magento
| Sichere Webanwendungen
| PHP 5.3 und MySQL 5.1 - Videotraining
| Apache 2
| Suchmaschinen- Optimierung für Webentwickler
| Joomla! 1.5
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

[Galileo Computing]
Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de