Sticky PostingsQuellcode zum BuchWir arbeiten gerade daran, den Quellcode aller Listings zum Buch nochmals zu prüfen und werden ihn dann als ZIP-Archiv sowie als (ggf. kommentierten) Quellcode hier zur Verfügung stellen. Friday, September 12. 2008Rezension im Linux-Magazin 09/08
Das Linux-Magazin rezensiert in seiner vorigen Ausgabe (September 2008) die 3. Auflage des Buches "PHP-Sicherheit". Fazit:
Schön, daß dieses lehrreiche und notwendige Buch nach der vergriffenen zweiten Auflage wieder erhältlich ist - wenn auch mit wenig Neuem. Recht haben sie, die Kollegen - denn die dritte Auflage war von vorneherein nur als "Bugfix Release" gedacht. Anders als in der Softwarebranche sind Versionsnummern à la "2.1" aber bei Druckerzeugnissen eher nicht üblich. Buchvorstellung in der Online-Ausgabe der "PC Welt"
Die Zeitschrift "PC Welt" widmet der dritten Auflage von "PHP-Sicherheit" eine ausführliche Besprechung.
So heißt es dort: Das macht die Lektüre spezieller Fachliteratur zur Pflichtaufgabe jedes Programmierers und Server- beziehungsweise Datenbankadministrators. Das Buch "PHP-Sicherheit" aus dem dpunkt-Verlag ist so eine Pflichtlektüre und eine sehr gute obendrein. Fazit der Rezension: Mit einem Buch hat man alle derzeit denkbaren Angriffsstechniken und -Szenarien und -Schwachstellenbeschreibung zur Hand - das ist die Stärke dieses spezialisierten Werkes, dessen Preis von 36 Euro wirklich gut angelegt ist. Die vollständige Besprechung finden Sie hier: Besprechung "PHP-Sicherheit" in PC-Welt. Friday, July 4. 2008Neue Rezension zur dritten Auflage
Von Garvin Hicking, Autor des offiziellen Handbuches zu Serendipity, dem Weblog-System, das auch für diese Website verwendet wird, kommt eine erste Rezension zur dritten Auflage:
Die dritte Auflage des Buches "PHP-Sicherheit" trägt nach wie vor zu Recht einen schlagkräftigen Namen. Allein das Inhaltsverzeichnis liest sich wie eine Offenbarung aller Schlüsselwörter, die man im Zusammenhang mit "Security" jemals gehört haben sollte. Mehr können Sie auf Garvins Blog lesen: Rezension zu PHP-Sicherheit, 3. Auflage Tuesday, April 8. 2008PHP-SicherheitDritte überarbeitete Auflage jetzt im Buchhandel erhältlichChristopher Kunz / Stefan Esser / Peter Prochaska PHP-SicherheitPHP/MySQL-Webanwendungen sicher programmierenWebanwendungen. Leider werden Sicherheitsaspekte bei der PHP-Entwicklung oft vernachlässigt. Dies führt leicht zu massiven Sicherheitsproblemen und ist dann für kompromittierte Server und verunstaltete Webseiten verantwortlich. Wie man solche Risiken erkennen und abwehren kann, zeigt dieses Buch.
Zielgruppe:
Kapitel 1: Einleitung1.1 Über Als im Herbst 2004 das Konzept für die erste Auflage dieses Seitdem konnte die PHP, nicht zuletzt dank der Fülle PHP 5 bietet all denen, die zuvor die etwas lückenhafte Mit dem immensen Wachstum der Nutzer- und Andere Sicherheitsprobleme auf Internetseiten mit dem Seit 2004 hat sich die Struktur der Angriffe, aber auch In zum Glück stärkerem Maße als Hacker, Cracker und An wen richtet sich dieses Buch? Das Buch »PHP-Sicherheit« wurde mit Blick auf zwei PHP-Neulinge Gerade Neulinge auf dem Feld der PHP-Entwicklung gehen Wir möchten mit diesem Buch Einsteiger auf Gefahren und Fortgeschrittene Auch fortgeschrittene PHP-Entwickler, die bereits Systemadministratoren Der letzte Teil des Buches richtet sich an 1.2 Was ist In der IT existiert ein geflügelter Spruch, der besagt, Eine sinnvolle Definition des Sicherheitsbegriffes kann Ein System kann als sicher gelten, wenn die Kosten Cracker und sonstige böse Buben verfügen nämlich nicht Ist aber die verwendete Software auf dem neuesten Stand Ein Unternehmen, das sehr viele wertvolle Daten 1.3 Wichtige Um in den folgenden Kapiteln nicht stets neue Defense in Depth Werden Sicherheitskonzepte angesprochen, taucht das Der von Defense in Depth verfolgte Ansatz geht von Netzwerk Diese Sicherung beginnt bereits auf der Netzwerkebene: Betriebssystem Auf Betriebssystemebene setzt die zweite Web Application Firewall Eine Web Application Firewall (WAF), die webbasierte Angriffe aus dem produktiven Traffic herausfiltert und die Administratoren Webserver Bei Webapplikationen ist die nächste Ebene einer PHP-Anwendungen Die nächste Ebene des Defense in Depth sind die Ein-/Ausgabeu Auf der Datenebene sollte gewährleistet sein, dass Der Vorteil an dieser Sicht der Dinge ist, dass die First und Second Order Bei Angriffen gegen andere Systeme geht man First Order Ein Angriff erster Ordnung liegt vor, wenn durch eine SQL-Injection, XSS (was dies alles ist, erfahren Sie in den folgenden Second Order Die Angriffe zweiter Ordnung müssen meist »blind« durchgeführt werden. Der Angreifer weiß oder vermutet, dass an einer bestimmten Somit sind Second-Order-Angriffe häufig wesentlich 1.4 Sicherheitskonzepte Security is a process, not a product. Seitdem elektronische Datenverarbeitung existiert, Auch Verschlüsselungsalgorithmen oder Verfahren zur Der lange Zeit als unüberwindbar geltende Prüfsummen, die mit den Algorithmen SHA-1 oder MD5 Daher sollte ein Sicherheitskonzept nicht daraus Um zu einem tragfähigen Sicherheitskonzept für Ihre Betreiben Sie eine dynamische Website auf einem eigenen In einem Unternehmen, das vertrauliche Informationen Ein tragfähiges Sicherheitskonzept ist sehr umfangreich Im nächsten Abschnitt fassen wir die wichtigsten Punkte 1.5 ISO 17799 Besonders in großen Unternehmen ist die Sicherheit der Die ISO unterteilt Sicherheit in Informationssystemen Vertraulichkeit, also die Sicherheit, dass Integrität – Informationen und Die ständige Verfügbarkeit Der Standard schreibt vor, dass alle Mechanismen, die zur Wahrung dieser Faktoren etabliert Auch auf die Absicherung bei »third-party access«, also Auch die Sicherheit von Zugangskennungen wird behandelt Eine vollständige Besprechung der ISO 17799 bzw. der 1.6 Wie verkaufe ich Sicherheit? Wenn Sie dieses Buch lesen, sind Sie vielleicht auf Was für Sie völlig einleuchtend sein dürfte – Insbesondere in Unternehmen, deren Hauptgeschäftsfeld Für Manager zählt hauptsächlich, wie sich eine Ausgabe Genauer betrachtet, stimmt das natürlich nicht – das müssen Der Verlust von Kundendaten kann ernste juristische Da der Diebstahl durch eine Sicherheitslücke im Bei webbasierten Anwendungen ist ein Beispiel für den Verdient Ihr Unternehmen sein Geld mit der Entwicklung Neben den direkten Folgen juristischer oder
1.7 Wichtige Informationsquellen Dieses Buch bemüht sich, Ihnen einen Überblick über
1.7.1 Mailinglisten Das Gros dieser Diskussionen findet auf den Die übliche Netiquette gilt natürlich auch hier – Die Liste »Full Disclosure« ist nicht nur eine Trotz dieser Widrigkeiten hält sich die Praxis der Full Da FD nicht moderiert wird, ist die Latenz zwischen Die Liste Full Disclosure sollte trotzdem Ihre tägliche Der Sicherheitsexperte Kurt Seifried betreibt eine 1.7.3 BugTraq Im Gegensatz zur ungefilterten Full Disclosure ist Andererseits sind die Diskussionen dort bei Weitem Einen Gutteil des Verkehrs auf BugTraq machen BugTraq ist mittlerweile mehr oder minder eine reine BugTraq können Sie abonnieren, indem Sie eine leere 1.7.4 WebAppSec Für Entwickler von Webapplikationen hochinteressant Auch für ein 1.8 OWASP Open Web Application Security Eine der wichtigsten Ressourcen für an Sicherheit Ein Ziel des OWASP ist es, feste Standards zu Von besonderem Interesse für jeden PHP-Entwickler ist Ein weiteres interessantes Dokument ist die »OWASP Web Das als PDF erhältliche Dokument steht – ebenso wie der Die Teilnahme an der OWASP steht jedem offen – es Natürlich gibt es zu diesem Buch auch eine Website, Darüber hinaus werden Artikel zu PHP-Sicherheit und Inhaltsverzeichnis
Inhaltsverzeichnis
1 Einleitung 1 1.1 Über dieses Buch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Was ist Sicherheit? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Wichtige Begriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.4 Sicherheitskonzepte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.5 ISO 17799 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.6 Wie verkaufe ich Sicherheit? . . . . . . . . . . . . . . . . . . . . . . . 10 1.7 Wichtige Informationsquellen . . . . . . . . . . . . . . . . . . . . . . 12 1.7.1 Mailinglisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.7.2 Full Disclosure . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.7.3 BugTraq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.7.4 Webappsec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.8 OWASP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.9 PHP-Sicherheit.de . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2 Informationsgewinnung 17 2.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2 Webserver erkennen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2.1 Server-Banner erfragen . . . . . . . . . . . . . . . . . . . . 19 2.2.2 Webserver-Verhalten interpretieren . . . . . . . . . . . 21 2.2.3 Tools für Webserver-Fingerprinting . . . . . . . . . . . 22 2.3 Betriebssystem erkennen . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.4 PHP-Installation erkennen . . . . . . . . . . . . . . . . . . . . . . . . 23 2.5 Datenbanksystem erkennen . . . . . . . . . . . . . . . . . . . . . . . 25 viii Inhaltsverzeichnis 2.6 Datei-Altlasten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.6.1 Temporäre Dateien . . . . . . . . . . . . . . . . . . . . . . . 27 2.6.2 Include- und Backup-Dateien . . . . . . . . . . . . . . . . 28 2.6.3 Dateien von Entwicklungswerkzeugen . . . . . . . . 29 2.6.4 Vergessene oder »versteckte« PHP-Dateien . . . . . 29 2.7 Pfade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.7.1 mod_speling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.7.2 robots.txt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.7.3 Standardpfade . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.7.4 Pfade verkürzen . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.8 Kommentare aus HTML-Dateien . . . . . . . . . . . . . . . . . . . 35 2.9 Applikationen erkennen . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.9.1 Das Aussehen/Layout . . . . . . . . . . . . . . . . . . . . . . 36 2.9.2 Das Vorhandensein bestimmter Dateien . . . . . . . 36 2.9.3 Header-Felder . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.9.4 Bestimmte Pfade . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.9.5 Kommentare im Quellcode . . . . . . . . . . . . . . . . . 37 2.10 Default-User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.11 Google Hacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.12 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3 Parametermanipulation 41 3.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.2 Werkzeuge zur Parametermanipulation . . . . . . . . . . . . . . . 44 3.2.1 Parametermanipulation mit dem Browser . . . . . . 44 3.2.2 Einen Proxy benutzen . . . . . . . . . . . . . . . . . . . . . 47 3.3 Angriffsszenarien und Lösungen . . . . . . . . . . . . . . . . . . . . 49 3.3.1 Fehlererzeugung . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.3.2 HTTP Response Splitting . . . . . . . . . . . . . . . . . . . 51 3.3.3 Remote Command Execution . . . . . . . . . . . . . . . 55 3.3.4 Angriffe auf Dateisystemfunktionen . . . . . . . . . . . 57 3.3.5 Angriffe auf Shell-Ebene . . . . . . . . . . . . . . . . . . . 58 3.3.6 Cookie Poisoning . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.3.7 Manipulation von Formulardaten . . . . . . . . . . . . 60 3.3.8 Vordefinierte PHP-Variablen manipulieren . . . . . 61 3.3.9 Spam über Mailformulare . . . . . . . . . . . . . . . . . . 61 Inhaltsverzeichnis ix 3.4 Variablen richtig prüfen . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.4.1 Auf Datentyp prüfen . . . . . . . . . . . . . . . . . . . . . . 64 3.4.2 Datenlänge prüfen . . . . . . . . . . . . . . . . . . . . . . . . 65 3.4.3 Inhalte prüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 3.4.4 Whitelist-Prüfungen . . . . . . . . . . . . . . . . . . . . . . 68 3.4.5 Blacklist-Prüfung . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.4.6 Clientseitige Validierung . . . . . . . . . . . . . . . . . . . 70 3.5 register_globals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.6 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 4 Cross-Site Scripting 75 4.1 Grenzenlose Angriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.2 Was ist Cross-Site Scripting? . . . . . . . . . . . . . . . . . . . . . . 76 4.3 Warum XSS gefährlich ist . . . . . . . . . . . . . . . . . . . . . . . . 77 4.4 Erhöhte Gefahr dank Browserkomfort . . . . . . . . . . . . . . . 78 4.5 Formularvervollständigung verhindern . . . . . . . . . . . . . . . 79 4.6 XSS in LANs und WANs . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.7 XSS – einige Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 4.8 Ein klassisches XSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 4.9 Angriffspunkte für XSS . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.10 Angriffe verschleiern – XSS Cheat Sheet . . . . . . . . . . . . . . 85 4.11 Einfache Gegenmaßnahmen . . . . . . . . . . . . . . . . . . . . . . . 88 4.12 XSS verbieten, HTML erlauben – wie? . . . . . . . . . . . . . . . 90 4.12.1 BBCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4.12.2 HTML-Filter mit XSS-Blacklist . . . . . . . . . . . . . . 92 4.12.3 Whitelist-Filtern mit »HTML Purifier« . . . . . . . 94 4.13 Die Zwischenablage per XSS auslesen . . . . . . . . . . . . . . . 97 4.14 XSS-Angriffe über DOM . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.15 XSS in HTTP-Headern . . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.15.1 Angriffe der ersten Ordnung mit Headern . . . . . 101 4.15.2 Second Order XSS per Header . . . . . . . . . . . . . 101 4.16 Attack API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 4.17 Second Order XSS per RSS . . . . . . . . . . . . . . . . . . . . . . . 104 x Inhaltsverzeichnis 4.18 Cross-Site Request Forgery (CSRF) . . . . . . . . . . . . . . . . . 105 4.18.1 CSRF als Firewall-Brecher . . . . . . . . . . . . . . . . . 108 4.18.2 CSRF in BBCode . . . . . . . . . . . . . . . . . . . . . . . . 108 4.18.3 Ein erster Schutz gegen CSRF . . . . . . . . . . . . . . 109 4.18.4 CSRF-Schutzmechanismen . . . . . . . . . . . . . . . . . 111 4.18.5 Formular-Token gegen CSRF . . . . . . . . . . . . . . . 112 4.18.6 Unheilige Allianz – CSRF und XSS . . . . . . . . . . 113 5 SQL-Injection 115 5.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 5.2 Auffinden von SQL-Injection-Möglichkeiten . . . . . . . . . . 117 5.2.1 GET-Parameter . . . . . . . . . . . . . . . . . . . . . . . . . 118 5.2.2 POST-Parameter . . . . . . . . . . . . . . . . . . . . . . . . 119 5.2.3 Cookie-Parameter . . . . . . . . . . . . . . . . . . . . . . . 120 5.2.4 Server-Variablen . . . . . . . . . . . . . . . . . . . . . . . . 121 5.3 Syntax einer SQL-Injection . . . . . . . . . . . . . . . . . . . . . . . 124 5.3.1 Sonderzeichen in SQL . . . . . . . . . . . . . . . . . . . . 124 5.3.2 Schlüsselwörter in SQL . . . . . . . . . . . . . . . . . . . 125 5.3.3 Einfache SQL-Injection . . . . . . . . . . . . . . . . . . . 125 5.3.4 UNION-Injections . . . . . . . . . . . . . . . . . . . . . . . 127 5.4 Advanced SQL-Injection . . . . . . . . . . . . . . . . . . . . . . . . . 130 5.4.1 LOAD_FILE . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 5.4.2 Denial-of-Service mit SQL-Injection . . . . . . . . . . 131 5.4.3 ORDER BY Injection . . . . . . . . . . . . . . . . . . . . . 131 5.5 Wie kann man sich vor SQL-Injection schützen? . . . . . . . 133 5.5.1 Sonderzeichen maskieren . . . . . . . . . . . . . . . . . . 133 5.5.2 Ist Schlüsselwort-Filterung ein wirksamer Schutz? . . . . . . . . . . . . . . . . . . . . . . . 133 5.5.3 Parameter Binding/Prepared Statements . . . . . . . 134 5.5.4 Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . 135 5.6 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 6 Autorisierung und Authentisierung 137 6.1 Beliebte Fehler in Login-Formularen . . . . . . . . . . . . . . . . 137 6.1.1 Falsche Request-Methode . . . . . . . . . . . . . . . . . 137 6.1.2 Falsche SQL-Abfrage . . . . . . . . . . . . . . . . . . . . . 138 6.1.3 SQL-Injection . . . . . . . . . . . . . . . . . . . . . . . . . . 139 6.1.4 XSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Inhaltsverzeichnis xi 6.2 Authentisierungssicherheit . . . . . . . . . . . . . . . . . . . . . . . 140 6.2.1 SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 6.2.2 Behandlung von Passwörtern . . . . . . . . . . . . . . 142 6.2.3 Benutzernamen und Kennungen . . . . . . . . . . . . 144 6.2.4 Sichere Passwörter . . . . . . . . . . . . . . . . . . . . . . 144 6.2.5 Passwort-Sicherheit bestimmen . . . . . . . . . . . . . 148 6.2.6 Vergessene Passwörter . . . . . . . . . . . . . . . . . . . 150 6.3 Spam-Vermeidung mit CAPTCHAs . . . . . . . . . . . . . . . . 155 7 Sessions 161 7.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 7.2 Permissive oder strikte Session-Systeme . . . . . . . . . . . . . 163 7.3 Session-Speicherung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 7.4 Schwache Session-ID-Generierungsalgorithmen . . . . . . . 166 7.5 Session-Timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 7.6 Bruteforcing von Sessions . . . . . . . . . . . . . . . . . . . . . . . . 168 7.7 Session Hijacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 7.8 Session Fixation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 7.9 Zusätzliche Abwehrmethoden . . . . . . . . . . . . . . . . . . . . 172 7.9.1 Page Ticket System . . . . . . . . . . . . . . . . . . . . . . 172 7.9.2 Session-Dateien mittels Cronjob löschen . . . . . . 173 7.9.3 Session-ID aus dem Referrer löschen . . . . . . . . . 173 7.10 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 8 Upload-Formulare 175 8.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 8.2 Aufbau eines Upload-Formulars . . . . . . . . . . . . . . . . . . . 175 8.3 PHP-interne Verarbeitung . . . . . . . . . . . . . . . . . . . . . . . 176 8.4 Speicherung der hochgeladenen Dateien . . . . . . . . . . . . . 177 8.5 Bildüberprüfung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 8.6 PHP-Code in ein Bild einfügen . . . . . . . . . . . . . . . . . . . . 179 8.7 Andere Dateitypen überprüfen . . . . . . . . . . . . . . . . . . . . 180 8.8 Gefährliche Zip-Archive . . . . . . . . . . . . . . . . . . . . . . . . . 181 8.9 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 xii Inhaltsverzeichnis 9 Variablenfilter mit ext/filter 183 9.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 9.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 9.3 Die Filter-API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 9.4 Verfügbare Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 9.4.1 Validierende Filter . . . . . . . . . . . . . . . . . . . . . . . 186 9.4.2 Reinigende Filter . . . . . . . . . . . . . . . . . . . . . . . . 187 9.5 Zahlen prüfen und filtern . . . . . . . . . . . . . . . . . . . . . . . . 187 9.6 Boolesche Werte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 9.7 URLs validieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 9.8 IP-Adressen prüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 9.9 Syntaxcheck für E-Mail-Adressen . . . . . . . . . . . . . . . . . . 192 9.10 Reinigende Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 9.11 Prüfung externer Daten . . . . . . . . . . . . . . . . . . . . . . . . . . 193 9.12 Callback-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 9.13 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 10 PHP intern 197 10.1 Fehler in PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 10.1.1 File-Upload-Bug . . . . . . . . . . . . . . . . . . . . . . . . . 197 10.1.2 Unsichere (De-)Serialisierung . . . . . . . . . . . . . . . 198 10.1.3 Gefährliches Speicherlimit . . . . . . . . . . . . . . . . . 198 10.1.4 Speicherproblem dank htmlentities . . . . . . . . . . 198 10.1.5 Bewertung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 10.2 Bestandteile eines sicheren Servers . . . . . . . . . . . . . . . . . . 199 10.3 Unix oder Windows? . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 10.4 Bleiben Sie aktuell! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 10.5 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 10.5.1 Installation als Apache-Modul . . . . . . . . . . . . . . 202 10.5.2 CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 10.6 suExec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 10.7 Safe Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 10.7.1 Einrichtung des Safe Mode . . . . . . . . . . . . . . . . 208 10.7.2 safe_mode_exec_dir . . . . . . . . . . . . . . . . . . . . . . 208 10.7.3 safe_mode_include_dir . . . . . . . . . . . . . . . . . . . . 209 10.7.4 Umgebungsvariablen im Safe Mode . . . . . . . . . . 209 10.7.5 Safe Mode considered harmful? . . . . . . . . . . . . . 210 Inhaltsverzeichnis xiii 10.8 Weitere PHP-Einstellungen . . . . . . . . . . . . . . . . . . . . . . . 212 10.8.1 open_basedir . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 10.8.2 disable_functions . . . . . . . . . . . . . . . . . . . . . . . 213 10.8.3 disable_classes . . . . . . . . . . . . . . . . . . . . . . . . . . 213 10.8.4 max_execution_time . . . . . . . . . . . . . . . . . . . . . 214 10.8.5 max_input_time . . . . . . . . . . . . . . . . . . . . . . . . 214 10.8.6 memory_limit . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.8.7 Upload-Einstellungen . . . . . . . . . . . . . . . . . . . . 215 10.8.8 allow_url_fopen . . . . . . . . . . . . . . . . . . . . . . . . 216 10.8.9 allow_url_include . . . . . . . . . . . . . . . . . . . . . . . 216 10.8.10 register_globals . . . . . . . . . . . . . . . . . . . . . . . . . 217 10.9 Code-Sandboxing mit runkit . . . . . . . . . . . . . . . . . . . . . 217 10.10 Externe Ansätze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 10.10.1 suPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 10.10.2 FastCGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 10.10.3 Das Apache-Modul mod_suid . . . . . . . . . . . . . . 225 10.11 Rootjail-Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 10.11.1 BSD-Rootjails . . . . . . . . . . . . . . . . . . . . . . . . . . 229 10.11.2 User Mode Linux . . . . . . . . . . . . . . . . . . . . . . . 229 10.11.3 mod_security . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 10.11.4 mod_chroot . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 10.12 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 11 PHP-Hardening 233 11.1 Warum PHP härten? . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 11.1.1 Buffer Overflows . . . . . . . . . . . . . . . . . . . . . . . . 234 11.1.2 Schutz vor Pufferüberläufen im Suhosin-Patch . . . . . . . . . . . . . . . . . . . . . . . . . . 235 11.1.3 Schutz vor Format-String-Schwachstellen . . . . . 236 11.1.4 Simulationsmodus . . . . . . . . . . . . . . . . . . . . . . . 237 11.1.5 Include-Schutz gegen Remote-Includes und Nullbytes . . . . . . . . . . . . . . . . . . . . . . . . . . 237 11.1.6 Funktions- und Evaluationsbeschränkungen . . . 239 11.1.7 Schutz gegen Response Splitting und Mailheader Injection . . . . . . . . . . . . . . . . . . . . . 240 11.1.8 Variablenschutz . . . . . . . . . . . . . . . . . . . . . . . . 240 11.1.9 SQL Intrusion Detection . . . . . . . . . . . . . . . . . . 240 11.1.10 Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 11.1.11 Transparente Cookie- und Session-Verschlüsselung . . . . . . . . . . . . . . . . . . 241 11.1.12 Härtung des Speicherlimits . . . . . . . . . . . . . . . . 241 11.1.13 Kryptographische Funktionen . . . . . . . . . . . . . . 241 xiv Inhaltsverzeichnis 11.2 Prinzipien hinter Suhosin . . . . . . . . . . . . . . . . . . . . . . . . 242 11.3 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 11.3.1 Installation des Patches . . . . . . . . . . . . . . . . . . . 243 11.3.2 Installation der Extension . . . . . . . . . . . . . . . . . 245 11.4 Zusammenarbeit mit anderen Zend-Extensions . . . . . . . 246 11.5 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 11.5.1 Generelle Optionen . . . . . . . . . . . . . . . . . . . . . . 247 11.5.2 Log-Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 11.5.3 Alarm-Skript . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 11.5.4 Transparente Verschlüsselung . . . . . . . . . . . . . . 254 11.5.5 Variablenfilter . . . . . . . . . . . . . . . . . . . . . . . . . . 255 11.5.6 Upload-Konfiguration . . . . . . . . . . . . . . . . . . . . 257 11.6 Beispielkonfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 11.7 Fazit und Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 12 Webserver-Filter für Apache 261 12.1 Einsatzgebiet von Filtermodulen . . . . . . . . . . . . . . . . . . . 261 12.2 Blacklist oder Whitelist? . . . . . . . . . . . . . . . . . . . . . . . . . 262 12.3 mod_security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12.3.1 So funktioniert’s . . . . . . . . . . . . . . . . . . . . . . . . 264 12.3.2 Gefahren durch mod_security . . . . . . . . . . . . . . 264 12.3.3 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 12.3.4 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . 266 12.3.5 Regelwerk von mod_security . . . . . . . . . . . . . . . 269 12.3.6 Alarm-Skript für mod_security . . . . . . . . . . . . . 279 12.3.7 Rootjail-Umgebungen mit mod_security . . . . . . 279 12.3.8 mod_security 2.0 . . . . . . . . . . . . . . . . . . . . . . . . 281 12.4 mod_parmguard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 12.4.1 So funktioniert’s . . . . . . . . . . . . . . . . . . . . . . . . 285 12.4.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 12.4.3 Webserver-Konfiguration . . . . . . . . . . . . . . . . . . 287 12.4.4 XML-Whitelist manuell erstellen . . . . . . . . . . . . 288 12.4.5 Automatische Erzeugung . . . . . . . . . . . . . . . . . . 293 12.5 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 Inhaltsverzeichnis xv Anhang 295 A Checkliste für sichere Webapplikationen 297 B Wichtige Optionen in php.ini 301 B.1 variables_order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 B.2 register_globals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 B.3 register_long_arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 B.4 register_argc_argv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 B.5 post_max_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 B.6 magic_quotes_gpc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 B.7 magic_quotes_runtime . . . . . . . . . . . . . . . . . . . . . . . . . . 303 B.8 always_populate_raw_post_data . . . . . . . . . . . . . . . . . . 303 B.9 allow_url_fopen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 B.10 allow_url_include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 C Liste aller Schwachstellen mit Gefahrenpotenzial-Bewertung 305 C.1 Cross-Site Scripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 C.2 Information Disclosure . . . . . . . . . . . . . . . . . . . . . . . . . . 305 C.3 Full Path Disclosure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 C.4 SQL-Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 C.5 HTTP Response Splitting . . . . . . . . . . . . . . . . . . . . . . . . 306 C.6 Cross-Site Request Forgery . . . . . . . . . . . . . . . . . . . . . . . 307 C.7 Remote Command Execution . . . . . . . . . . . . . . . . . . . . . 307 C.8 Mail-Header Injection . . . . . . . . . . . . . . . . . . . . . . . . . . 307 D Glossar 309 Stichwortverzeichnis 317 Dritte Auflage in Arbeit
Die dritte Auflage unseres Buches ist nun in Arbeit. Momentan bin ich dabei, die vom Fachlektorat angemerkten Korrekturen einzupflegen, danach geht das Buch ins Layout und dann hoffentlich ohne weitere Verzögerung in den Druck.
Es handelt sich bei der dritten - anders als der zweiten Auflage - nicht um eine inhaltlich wesentlich erweiterte Version, sondern um eine Korrekturauflage. Da die zweite Auflage praktisch ausverkauft ist (der Verlag hat keine Exemplare mehr, in Buchhandlungen bzw. online sind noch Reste verfügbar), muß in Bälde neu aufgelegt werden. Gestern kam nun der neue dpunkt-Verlagskatalog mit der Ankündigung der dritten Auflage hinzu. Neben den üblichen Typofixes und Errata (vielen Dank an dieser Stelle an alle Einsender!) haben wir das Kapitel über Suhosin/Hardened PHP nochmals überarbeitet, das Kapitel zu Authentifizierung/Autorisierung inhaltlich etwas geradegezogen (u.a. auch mit einer kurzen Einführung der Begriffe Authentisierung, Authentifizierung, Autorisierung) und an anderen Stellen Aktualisierungen eingepflegt. Alle Besitzer der zweiten Auflage sollten zumindest einen Blick hineinwerfen, für die Käufer der ersten Auflage unseres Buches bietet sich ein Kauf aber langsam an - denn zusammen mit den in die zweite Auflage eingeflossenen Änderungen hat sich doch deutlich was getan... Für die vierte Auflage planen wir neue Inhalte, aber auch Anpassungen an das dann hoffentlich verfügbare PHP 6. Wer noch Anregungen für uns hat, was wir besser machen können oder wozu wir mal etwas schreiben könnten - immer her damit! Kapitel 8: secureupload.php - Sicherer Upload
<?php
$extension = substr(strrchr($_FILES['filename']['name'], "."), 1); if ( stristr($extension,'.gif')) $extension = '.gif'; elseif ( stristr($extension,'.png')) $extension = '.png'; elseif ( stristr($extension,'.jpg')) $extension = '.jpg'; else die (); $newfilename = md5(microtime().rand(10000, 32000)); move_uploaded_file($_FILES['filename']['tmp_name'],'/usr/local/ uploads/.'$newfilename.$extension); ?> Friday, October 19. 2007Neue Lesermeinung auf amazon.de
Lars H. Korte schreibt:
Das Buch sollte mir einen kleinen Einblick in die Welt der PHP-Sicherheit geben. Ich war neugierig, was es für Möglichkeiten gibt, in PHP-Anwendungen einzubrechen und wie ich meine Anwendungen gegen "böse Buben und Mädels" schützen kann. Neues Leserfeedback
Thorsten Wisser schreibt:
Übrigens: großes Lob an Euch, ist ein super Buch, habe die 1. Auflage. Wednesday, April 25. 2007Erste Rezension zur zweiten Auflage
Von Pelle Boese kommt die erste Rezension zur Zweiten Auflage unseres Buches - vielen Dank für die freundlichen Worte!
Die aktualisierte zweite Auflage des Buches von Christopher Kunz und Peter Prochaska, die über 50 Seiten mehr als die erste Auflage bietet, ist eine lohnende - in meinen Augen sogar dringend notwendige - Anschaffung für PHP Entwickler und Systemadministratoren, aber auch für Entwickler die mit anderen Sprachen im Web-Bereich arbeiten. Besonders die Kapitel über Parametermanipulation, Cross-Site-Scripting und SQL-Injections sind, bis auf die Beispiele in PHP, sprachübergreifend. Die vollständige Rezension können Sie auf amazon.de nachlesen. Saturday, March 3. 2007Zweite Auflage im Druck
Die zweite Auflage unseres Buches "PHP-Sicherheit. PHP/MySQL-Webanwendungen sicher programmieren" ist nun im Druck.
Neu dazugekommen ist Stefan "MOPB" Esser als Co-Autor und eine Menge Content:
Insgesamt 320 Seiten (vorher 277) und damit ein ganzes Stück voluminöser als die erste Auflage. Vorbestellbar unter Anderem bei Amazon. Thursday, November 9. 2006Neues Leserfeedback
"[..], muss ich wirklich sagen, dass ich seit sehr langer Zeit kein so fachlich gutes und vor allem gut geschriebenes Buch mehr gelesen hab. War wirklich mehr als positiv ueberrascht. Schoen, dass es noch Fachbuchautoren gibt, die auch wirklich Plan vom dem Fachbereich haben ueber den sie schreiben ;-)"
-- Martin J. Muench, www.remote-exploit.org Monday, January 30. 2006Leseprobe: Kapitel 1
Die einführenden Worte (u.a. zu den Themen "Was ist Sicherheit", "Wichtige Informationsquellen" u.a.) werden im ersten Kapitel erörtert, das als Leseprobe im PDF-Format auf der Seite des Verlags zur Verfügung steht.
(Page 1 of 2, totaling 16 entries)
» next page
|
Jetzt kaufen!KategorienLeseprobenStimmen zum Buch"Mit einem Buch hat man alle derzeit denkbaren Angriffsstechniken und -Szenarien und -Schwachstellenbeschreibung zur Hand - das ist die Stärke dieses spezialisierten Werkes, dessen Preis von 36 Euro wirklich gut angelegt ist." PC Welt
"Nachvollziehbar, mit Codebeispielen versehen und bequem zu lesen: Dieser Titel bietet eine gründliche Abhandlung, die jeder gelesen haben sollte, bevor er PHP-Skripte auf öffentlichen Webservern installiert. Selbst erfahrene PHP-Programmierer finden hier noch wertvolle Hinweise und konkrete Lösungen. ... macht dieses Buch selbst für Admins wertvoll, die selbst gar kein PHP programmieren." Linux-Magazin "Das Buch von Peter und Christopher, beide in der deutschen PHP-Welt als Sicherheitsexperten wohlbekannt, definiert den State of the Art. Es ist das zur Zeit auch international umfassendste Werk zum Thema und spricht alle Bereiche an, die ein PHP-Entwickler kennen muss. Erfreulicherweise beschränkt sich das Buch dabei nicht auf Development, sondern zeigt mit Hardened PHP und Mod-Security wie Sicherheit auch durch Infrastruktur gestützt werden kann. Und, vielleicht zählt das ja auch: Wir haben uns für jedes Office ein Exemplar gekauft." Johann-Peter Hartmann, Mayflower GmbH "Das Buch ist wirklich eines der besten Fachbücher aus dem Internet-Bereich das ich in den letzten Jahren gelesen habe! Sehr gut geschrieben, kompakte Informationen und natürlich auch fundiert. Die meisten Bücher mit ähnlicher Thematik legt man nach kurzer Zeit weg oder schläft darüber ein... Aber bei eurem Buch ist das eher wie in einem Krimi!" Ralph Brugger "Die in diesem Buch vermittelten Konzepte und Lösungen werden mit der wachsenden Bedeutung von PHP im unternehmenskritischen Bereich unverzichtbar. „PHP-Sicherheit“ kann allen PHP-Programmierern daher nur wärmstens empfohlen werden, da es zeigt, welche Fehler bei der Programmierung mit PHP gemacht werden können – und wie diese zu vermeiden sind." PHP-Magazin |


