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. Monday, November 5. 2012Vierte Auflage von "PHP-Sicherheit"?
Wir werden immer mal wieder gefragt, ob es eine vierte Auflage des Buchs "PHP-Sicherheit" geben werde. Derzeit antworte ich darauf wie Radio Eriwan: "Im Prinzip ja."
Aber: Das Buch, mittlerweile ist auch die dritte Auflage bereits vier Jahre alt, ist gealtert. Zwar in Würde (d.h. es steht unseres Wissens nach auch jetzt noch kein grober Unfug darin), aber viele Dinge sind einfach nicht mehr zeitgemäß. Es wird viel Zeit kosten, diese Inhalte zu straffen und zu aktualisieren - Zeit, die bei uns Autoren dünn gesät ist. Wir haben uns daher darauf verständigt, eine vierte Auflage zwar zu wollen, aber nicht mit einem festen Erscheinungstermin. "It's done when it's done", sozusagen. Mittlerweile ist das Buch als gedruckte Version überall ausverkauft und auch meine Rezensionsexemplare sind bis auf eines vergriffen (die letzten wechselten im Rahmen einer Schulung den Besitzer). Direkt beim Verlag gibt es das Buch jedoch noch als eBook für € 28,99: hier bestellen Fazit: Wir sind dran, aber können nicht sagen, wann die 4. Auflage kommen wird. 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 dieses Buch Als im Herbst 2004 das Konzept für die erste Auflage dieses Buches erstellt wurde, hatte PHP bereits viele andere Web-Skriptsprachen hinter sich gelassen. Millionen von Websites bauen auf die dynamische Skriptsprache, und von einfachen Gästebüchern bis hochkomplexen mehrstufigen Business-Applikationen sind PHP-Anwendungen in allen Größen, Farben und Formen zu finden. Seitdem konnte die PHP, nicht zuletzt dank der Fülle verfügbarer Webapplikationen, aber auch dank geringer Einstiegshürden für Entwickler seinen Vorsprung gegenüber anderen Sprachen deutlich ausbauen. Zwar kommen mit dem vielgerühmten „Web 2.0“ neue Herausforderungen und Konkurrenten – man denke an „Ruby on Rails“ – aber auch diese Hürde nimmt PHP spielend. PHP 5 bietet all denen, die zuvor die etwas lückenhafte Implementierung objektorientierter Programmierung von ernsthaften Gehversuchen abgehalten hat, eine umfassendere OOP-Schnittstelle und dazu geführt, dass noch mehr große Projekte und Firmen den Sprung von Lösungen mit Java oder .NET zu der freien Skriptsprache schaffen. Mit dem immensen Wachstum der Nutzer- und Entwicklergemeinde wuchsen allerdings auch die Schwierigkeiten. Waren sicherheitsrelevante Fehler in PHP-Programmen schon seit jeher ein ernst zu nehmendes Problem, so kam es im Laufe des Jahres 2004 zu einigen mehr oder weniger spektakulären Sicherheitslücken. Die Forensoftware phpBB war besonders schlimm betroffen, ist sie doch (aufgrund ihres reichhaltigen Feature-Umfangs und der relativ einfachen Administration) eine der Killer-Applikationen für PHP. Ohne freie und leicht zu benutzende Produkte wie phpBB wäre die Verbreitung von PHP sicher nicht so schnell gegangen – allerdings auch nicht die Verbreitung des ersten PHP-Wurms Santy[1], der eine Lücke in der Forensoftware ausnutzt, um Schadcode zu laden und auszuführen. Ironischerweise ist Santy ausgerechnet in Perl geschrieben, der Sprache, an der sich PHP lange Zeit messen lassen musste. Andere Sicherheitsprobleme auf Internetseiten mit dem Label »PHP powered« beschäftigten gleich die Staatsanwaltschaften[2] oder Mitarbeiter großer Telekommunikationskonzerne[3]. Bei allen Fehlern handelte es sich um Programmier- oder Designschnitzer, die vermeidbar gewesen wären. Obwohl auch in PHP selbst Bugs entdeckt (und behoben) wurden, die von einem böswilligen Angreifer für seine finsteren Zwecke verwendet werden konnten, liegt die große Mehrzahl der für die erfolgreiche Installation von Rootkits, Backdoors oder anderen Exploits verantwortlichen Sicherheitslücken in den Anwendungen selbst. Seit 2004 hat sich die Struktur der Angriffe, aber auch die Struktur der Angreifer verändert. Wurden PHP-basierte Webapplikationen noch vor wenigen Jahren hauptsächlich „zum Spaß“ angegriffen oder die sie beherbergenden Server als Ablageplatz für Raubkopien und Ähnliches mißbraucht, stehen nun kommerzielle Interessen im Vordergrund. Professionelle Crackergruppen nutzen automatisierte Tools, um massenhaft Schwachstellen in PHP-Anwendungen auszunutzen, sich Zugang zu Webservern zu verschaffen und diese zu kriminellen Handlungen wie Spam, Phishing, Denial of Service oder gar illegaler Pornographie zu mißbrauchen. Riesige „Botnetze“ gehackter Server- und Clientrechner erwarten die Befehle ihrer mafiös organisierten Beherrscher Obgleich es derlei Aktivitäten in engen Grenzen schon vor der ersten Auflage dieses Werkes gab, ist die Professionalität, Organisationsdichte und programmiererische Fähigkeit der Angreifer stark gewachsen. In zum Glück stärkerem Maße als Hacker, Cracker und Bauernfänger ist PHP den Kinderschuhen entwachsen, darüber besteht weitgehend Einigkeit. Anders als bei konventionellen Programmiersprachen wird allerdings in der Netzöffentlichkeit die Qualität einer Sprache nach wie vor an der Qualität der Anwendungen gemessen. So hat das Website-Management-System PHP-Nuke dem Ruf der Sprache PHP durch seine zahlreichen Sicherheitslücken nicht unerheblich geschadet – ähnlich wie das berüchtigte formmail.pl in Perl das sprichwörtliche Negativbeispiel ist. Das scheint ungerecht, schließlich wird C++ auch nicht für Fehler in Windows verantwortlich gemacht oder Assembler für Bugs im Interrupt-Handling des Linux-Kernels beschuldigt. Dennoch hat diese Haltung auch Vorteile: Sie zwingt das PHP-Team (die »PHP Group«) mittelfristig, »Best Practices« zu entwickeln und PHP-Programmierer zu mehr Sicherheitsbewusstsein zu erziehen. Dieses Buch soll dabei helfen, indem es Problemfelder aufzeigt, Lösungsmöglichkeiten anbietet und anhand klarer Checklisten die Absicherung neuer und vorhandener Skripte erleichtert. An wen richtet sich dieses Buch? Das Buch »PHP-Sicherheit« wurde mit Blick auf zwei Gruppen von Lesern geschrieben: Fortgeschrittene und Profis mit Wartungsaufgaben sowie Systemadministratoren für Web- und Datenbankserver. PHP-Neulinge Gerade Neulinge auf dem Feld der PHP-Entwicklung gehen – das haben die Autoren zumindest in vielen Fällen beobachten können – mit einer erfrischenden Naivität an die Programmierung ihrer ersten dynamischen Webseite heran. Das ist nicht grundsätzlich falsch, schließlich ist das Prinzip von »Trial and Error« so alt wie die Programmierung selbst. Da aber PHP eine serverbasierte Skriptsprache ist und die Entwicklung direkt auf dem Webserver stattfindet, sind fehlerhafte »Hallo Welt«-Elaborate nicht nur für ihren Schöpfer peinlich, sondern mit etwas Pech auch eine große Gefahr für andere Server im Internet. Wir möchten mit diesem Buch Einsteiger auf Gefahren und Risiken aufmerksam zu machen, die sie bei der Entwicklung und beim Einsatz von PHP-Skripten beachten müssen. Der Großteil aller Anfängerfehler lässt sich mit einigen grundlegenden Verhaltens- und Implementierungsregeln vermeiden – und damit auch das persönliche Gästebuch sicherer gestalten. Fortgeschrittene Auch fortgeschrittene PHP-Entwickler, die bereits mittlere bis große Anwendungen selbst oder als Teil eines Teams entwickelt haben, stehen oft vor ähnlichen Problemen. Sogenannter »Legacy Code«, also gewachsene Produkte, die seit langer Zeit »mitgeschleppt« werden, strotzen oft nur so vor Sicherheitsmängeln oder Designfehlern. Und doch ist ein kompletter Rewrite oft nicht machbar – also steht eine Sicherheitsüberprüfung des gesamten Quellcodes an. Die Checklisten im Anhang helfen, diese Aufgabe zu systematisieren – und selbst der versierteste PHP-Crack wird einige der in diesem Buch vorgestellten Lücken vielleicht noch nicht kennen. Systemadministratoren Der letzte Teil des Buches richtet sich an Systemadministratoren, also diejenigen, die unter schlecht geschriebenen und schlampig gewarteten Programmpaketen leiden und nach einem erfolgreichen oder misslungenen Hack die Aufräumarbeiten erledigen müssen. Obwohl sie meist Zugriff auf die Anwendung haben, können oder dürfen die Administratoren nur selten selbst sicherheitskritische Änderungen durchführen. Um Schaden abzuwenden, müssen also die Webserver so konfiguriert werden, dass ein Angreifer auch ein sehr unsicheres Skript nicht für seine Zwecke missbrauchen kann – der Webserver muss gegen Angriffe abgehärtet (»hardened«) werden. 1.2 Was ist Sicherheit? In der IT existiert ein geflügelter Spruch, der besagt, dass Daten erst dann sicher seien, wenn sie in einem Safe an einer unbekannten Stelle auf dem Meeresboden versenkt würden. So übertrieben das auch klingen mag, dieses Sprichwort enthält einen Funken Wahrheit. Absolute Sicherheit kann (ohne Tresore und Tiefsee-Lagerung in Betracht zu ziehen) nicht erzielt werden, alle Bemühungen müssen stets als »best effort« gelten. Eine sinnvolle Definition des Sicherheitsbegriffes kann stets nur kontextbezogen gefunden werden. Institutionen wie Finanz- oder Meldeämter, die mit hoch- und höchstvertraulichen Daten zu tun haben, werden unter Sicherheit etwas völlig anderes verstehen als jemand, der auf seiner privaten Homepage in einem einfachen CMS Bilder seines Goldfisches ausstellt. Daher kann man die Sicherheit von webbasierten Systemen (um die es in diesem Buch letztlich gehen soll) folgendermaßen umschreiben: Ein System kann als sicher gelten, wenn die Kosten für einen erfolgreichen Angriff den möglichen Nutzen übersteigen. Cracker und sonstige böse Buben verfügen nämlich nicht über unbegrenzte Zeit und Mittel. Die erste Gruppe von Angreifern, »Scriptkiddies«, rekrutiert sich überwiegend aus Jugendlichen und jungen Erwachsenen mit wenigen oder keinen Fachkenntnissen. Das typische Scriptkiddy verfügt über eine gut sortierte Bibliothek vorgefertigter Angriffstools für viele verschiedene Lücken und sucht sich seine Opfer meist anhand vorhandener Lücken aus. Derartige Angreifer werden sich vor allem leichte Ziele aussuchen, die gleichzeitig vielversprechende Möglichkeiten bieten. Ein Webserver, der schnell ans Internet angebunden ist und auf dem eine uralte Version des Forums phpBB verwendet wird, ist verlockende Beute für Scriptkiddies. Er ist leicht zu »knacken« und kann dann als Ablageplatz für Raubkopien oder als Relay, also Zwischenstation, für weitere Angriffe missbraucht werden. Ist aber die verwendete Software auf dem neuesten Stand oder auch recht unbekannt, wird mehr Aufwand notwendig, um in den Server einzudringen – ein Einbruch lohnt sich oft nicht mehr und die meisten Scriptkiddies werden schnell von einem Server ablassen, der auf den ersten – meist automatisierten – Blick keine Angriffsfläche bietet. Ein Unternehmen, das sehr viele wertvolle Daten verwaltet, ist jedoch auch für erfahrenere Cracker, die ihre Raubzüge aus kommerziellen Gründen durchführen, ein sehr attraktives Ziel. Hacker werden viel Zeit und Mittel aufwenden, um an diese Daten zu gelangen, es reicht daher nicht, die Datei mit sämtlichen Kundendaten in einem versteckten, aber für den Webserver zugänglichen Verzeichnis abzulegen. Sobald die möglichen Eindringlinge das Ziel als sehr attraktiv eingestuft haben, werden sie sich so lange an den frei zugänglichen Teilen verbeißen, bis sie einen Zugang finden. Mit einer Kundendatenbank voller Kontoinformationen können sie schließlich wesentlich mehr anfangen als mit den Bildern einer erfolgreichen Goldfischzucht. 1.3 Wichtige Begriffe Um in den folgenden Kapiteln nicht stets neue Erklärungen finden zu müssen, möchten wir einige wichtige Begriffe aus dem Sicherheitsjargon vorab erklären. Defense in Depth Werden Sicherheitskonzepte angesprochen, taucht das Schlagwort »Defense in Depth« immer öfter auf, um ein möglichst schlagkräftiges Sicherheitsprinzip zu beschreiben. Und tatsächlich ist das Prinzip der »Tiefenverteidigung«, wie eine deutsche Übersetzung des Begriffes lauten könnte, bei konsequenter Umsetzung sehr wirksam. Der von Defense in Depth verfolgte Ansatz geht von einer zwiebelschalenförmigen Sicherung aus, bei der eine Anwendung durch Sicherheitsmaßnahmen auf mehreren Ebenen geschützt ist. Netzwerk Diese Sicherung beginnt bereits auf der Netzwerkebene: Firewalls trennen die Webinfrastruktur vom internen Netzwerk oder VPN des Betreibers, und Paketfilter sorgen dafür, dass nur diejenigen Benutzer Zugriff auf sensitive Bereiche haben, die auch administrativ dafür zugelassen sind. Betriebssystem Auf Betriebssystemebene setzt die zweite Verteidigungslinie gegen Cracker und sonstige Finsterlinge an: Ein gehärteter Linux-Kernel wehrt selbsttätig Angriffe gegen den IP-Stack oder interne Funktionen ab und erlaubt kein Nachladen und Ausführen von Kernel-Modulen. Eine im Kernel implementierte Changeroot-Umgebung (chroot) separiert Anwendungen voneinander – und weitere Maßnahmen, die auf Betriebssystemebene implementiert werden. Web Application Firewall Eine Web Application Firewall (WAF), die webbasierte Angriffe aus dem produktiven Traffic herausfiltert und die Administratoren informiert, ist die dritte Verteidigungsebene. Webserver Bei Webapplikationen ist die nächste Ebene einer Defense-in-Depth-Strategie der Webserver, der im Rahmen seiner Möglichkeiten gehärtet werden sollte. Dazu gehören nicht nur Techniken zur Vermeidung von Informationslecks, sondern auch Sicherheitsmaßnahmen wie der Einsatz von SSL. Auch das Apache-Modul mod_security, das sich selbst bereits als WAF bezeichnet, oder chroot- und suExec-Mechanismen sind Teil dieser Ebene. PHP-Anwendungen Die nächste Ebene des Defense in Depth sind die PHP-Anwendungen selbst, und damit der Hauptgegenstand dieses Buches. Auch diese Anwendungen lassen sich wiederum in Schichten aufteilen, die separat voneinander gesichert werden. Ein-/Ausgabeu Auf der Datenebene sollte gewährleistet sein, dass keine schadhaften oder in böswilliger Absicht erstellten Daten (wie XSS-Angriffe zweiter Ordnung, siehe den nächsten Abschnitt) in die Datenspeicher gelangen können. Die Datenabfrageschicht sollte so implementiert sein, dass Angreifer nicht durch Tricks andere Daten als die vom Entwickler vorgesehenen abfragen können – und die Ein-/Ausgabeschicht muss Eingaben auf Schadcode überprüfen, diesen abfangen und möglicherweise unerwünschte Ausgaben verhindern. Der Vorteil an dieser Sicht der Dinge ist, dass die Zusammenarbeit zwischen den verschiedenen Schichten ähnlich wie im OSI-Modell geregelt ist: Jede Schicht kommuniziert nur mit der ihr direkt vorangehenden und nachfolgenden Ebene. Dadurch können Entwickler und Administratoren mit der größtmöglichen Unabhängigkeit voneinander arbeiten, um ihren jeweiligen Teil der Anwendung abzusichern. First und Second Order Bei Angriffen gegen andere Systeme geht man grundsätzlich von zwei verschiedenen Angriffstypen aus, und zwar von direkten Angriffen der ersten Ordnung und indirekten oder Angriffen der zweiten Ordnung. First Order Ein Angriff erster Ordnung liegt vor, wenn durch eine SQL-Injection, XSS (was dies alles ist, erfahren Sie in den folgenden Kapiteln) oder eine sonstige Attacke direkte Ergebnisse geliefert werden, also etwa die Liste der Administratorpasswörter aus der entsprechenden Datenbanktabelle gelesen und angezeigt wird, oder JavaScript-Code direkt im Kontext der angegriffenen Webseite ausgeführt wird. Angriffe erster Ordnung erlauben dem Angreifer, aufgrund der Antwort des angegriffenen Systems sein Vorgehen zu optimieren und sein Ziel zu erreichen. Dadurch sind First-Order-Angriffe in der Regel leichter durchzuführen als Second-Order-Attacken. Second Order Die Angriffe zweiter Ordnung müssen meist »blind« durchgeführt werden. Der Angreifer weiß oder vermutet, dass an einer bestimmten Stelle in der Zielanwendung nur ungenügende Eingabevalidierung vorgenommen wird, kann diese Tatsache jedoch nicht direkt ausnutzen, weil er an das betroffene Subsystem nicht herankommt. Ein klassisches Beispiel wird im Kapitel 4 »Cross-Site Scripting« behandelt: Log-Dateien oder -Datenbanken sind ein prädestiniertes Ziel für Second-Order-Angriffe. Der Angreifer sorgt dafür, dass mit Schadcode versehene Anfragen gespeichert werden, und wartet nun darauf, dass ein Administrator der Zielanwendung diese Daten auswertet. Ob und wann das geschehen wird und ob der Angriff dann auch erfolgreich sein wird, kann er nur selten vorhersagen. Somit sind Second-Order-Angriffe häufig wesentlich komplizierter und langwieriger in der Durchführung, was dazu führt, dass Entwickler und Administratoren ihnen nur geringe Bedeutung beimessen. Die Tatsache, dass sie jedoch meist direkt gegen Inhaber hoch privilegierter Accounts gerichtet sind, macht diese Angriffsklasse für Angreifer wie Verteidiger gleichermaßen zu einer lohnenden Herausforderung. 1.4 Sicherheitskonzepte Security is a process, not a product. Seitdem elektronische Datenverarbeitung existiert, haben sich kluge Köpfe Gedanken um die Sicherung der Daten und Systeme gegen Missbrauch gemacht. Die resultierenden Sicherheitskonzepte sind oft grundsätzlich fehlerhaft – etwa indem sie nur zur Zeit der Erstellung aktuelle Technologien berücksichtigen oder sich auf die Geheimhaltung bestimmter Daten verlassen. Beides hat sich in der Vergangenheit oft als Trugschluss erwiesen. Auch Verschlüsselungsalgorithmen oder Verfahren zur Erhöhung der Sicherheit sind nicht dadurch vertrauenswürdig, dass sie von ihrem Entwickler geheim gehalten werden. Obwohl die Mechanismen zur Passwortverschlüsselung z.B. bei Microsoft Windows nicht öffentlich zugänglich waren, konnten sie doch überwunden werden. Der lange Zeit als unüberwindbar geltende RC5-64-Verschlüsselungsalgorithmus wurde von einem Projekt Zehntausender Anwender auf der ganzen Welt in gut vier Jahren geknackt. Laut Moores Gesetz verdoppelt sich die Leistung der jeweils aktuellen Prozessorgeneration immer noch alle 18 Monate. Prüfsummen, die mit den Algorithmen SHA-1 oder MD5 erstellt wurden, lassen sich inzwischen in endlicher Zeit durch sogenannte »Kollisionen«, also die Erstellung einer identischen Prüfsumme für zwei verschiedene Ausgangswerte, überlisten[5]. Daher sollte ein Sicherheitskonzept nicht daraus bestehen, sich auf die Vertraulichkeit der eingesetzten Werkzeuge zu verlassen oder darauf zu vertrauen, dass die für einen Angreifer verfügbare Rechenleistung nicht ausreichen wird, um Ihren Verschlüsselungsalgorithmus zu brechen. Mit Seiten wie passcracking.com[6] und neuartigen zeitsparenden Brute-Force-Verfahren sind selbst MD5-Passwörter in einer recht kurzen Zeit zu knacken. Um zu einem tragfähigen Sicherheitskonzept für Ihre Firma oder auch nur Ihre privat entwickelte PHP-Applikation zu gelangen, sind einige Schritte notwendig. Die tatsächliche Absicherung Ihrer PHP-Skripte ist nur einer dieser Schritte, wenn auch der wichtigste. Betreiben Sie eine dynamische Website auf einem eigenen Server, müssen Sie (oder Ihre Mitarbeiter) dafür sorgen, dass nicht nur die verwendeten PHP-Anwendungen sicher sind, sondern auch dass alle anderen von außen erreichbaren Dienste keine Angreifer hereinlassen. Ihre Systeme sind nur so sicher wie das schwächste Glied in der Kette – in vielen Fällen ist das jedoch mit heißer Nadel gestrickte PHP-Software. Einen kompletten Leitfaden zur Absicherung Ihrer Serversysteme zu schreiben, würde den Rahmen dieses Buches sprengen – wir werden uns hauptsächlich mit PHP und einigen von PHP verwendeten Subsystemen wie Web- und Datenbankservern beschäftigen. In einem Unternehmen, das vertrauliche Informationen behandelt, muss ein Sicherheitskonzept integraler Bestandteil der Firmenprozesse und -politik sein. Datenverluste oder – schlimmer noch – Datendiebstähle gehören im Informationszeitalter zu den unangenehmsten Vorkommnissen für jede Firma. Ein tragfähiges Sicherheitskonzept ist sehr umfangreich und kann nicht auf wenige Punkte reduziert werden. Ein guter Anhaltspunkt ist die internationale Richtlinie ISO 17799, »Code of Practice for Information Security Management«, die als industrieweit anerkannter Standard für den sicheren Umgang mit IT-Systemen und allen dazugehörigen Subsystemen gilt. Wie alle ISO-Standards ist die Richtlinie leider nicht kostenlos erhältlich, kann aber direkt bei der ISO bestellt werden. Obgleich in ISO 17799 (die in vielen Unternehmen als BS 7799, kurz für »British Standard«, bekannt ist) kein Bezug auf webbasierte Systeme genommen wird, enthält die Richtlinie viele wichtige Anregungen, die Sie benutzen können, um die sicherheitsrelevanten Abläufe in Ihrem Unternehmen zu verbessern. Im nächsten Abschnitt fassen wir die wichtigsten Punkte der Richtlinie kurz für Sie zusammen und erläutern den Zusammenhang mit PHP-Sicherheit. 1.5 ISO 17799 Besonders in großen Unternehmen ist die Sicherheit der IT-Infrastruktur und ganz besonders der unternehmensinternen Daten eines der wichtigsten Ziele. Um Abläufe zu standardisieren und das Handling sicherheitsrelevanter Prozesse auf einen einheitlichen Nenner zu bringen, wurde von der British Standards Institution (BSI, nicht zu verwechseln mit dem deutschen Bundesamt für Sicherheit in der Informationstechnik) der Standard 7799 ins Leben gerufen. In diesem Dokument werden ausführlich »Best Practices«, also als vorbildlich anerkannte Abläufe für die Sicherheit in Informationssystemen, aufgeführt. Neben Aspekten wie der physischen Zugangssicherung enthält das Standardwerk, das mittlerweile als internationaler Standard ISO 17799 aufgelegt wurde, auch für Webanwendungen wichtige Punkte. Die ISO unterteilt Sicherheit in Informationssystemen in drei Faktoren, die in einem sicheren System stets erfüllt sein sollten: Vertraulichkeit, also die Sicherheit, dass Information nur dem zugänglich ist, der über die notwendige Autorisierung verfügt. Integrität – Informationen und informationsverarbeitende Vorgänge müssen stets akkurat und vollständig sein. Die ständige Verfügbarkeit aller Informationssysteme für berechtigte Benutzer ist der dritte wichtige Faktor. Der Standard schreibt vor, dass alle Mechanismen, die zur Wahrung dieser Faktoren etabliert werden, regelmäßig kontrolliert werden sollen, um auch auf neue Anforderungen reagieren zu können. Das werden die meisten Administratoren von Webservern intuitiv beherzigen – ist doch die Kontrolle auf neue Software-Updates nichts anderes als das, was der Standard fordert. Auch auf die Absicherung bei »third-party access«, also dem Zugriff Dritter auf die eigene Infrastruktur, legt ISO 17799 Wert. In der PHP-Welt ist das beispielsweise ein API Ihrer Anwendung, an die Ihre Kunden ihre eigenen Anwendungen anschließen können, um Funktionen und Informationen mit Ihrem System auszutauschen. Hier sollten Vereinbarungen vor Missbrauch schützen. Auch die Sicherheit von Zugangskennungen wird behandelt – dem Standard folgend, sollten Sie Ihren Benutzern – sei es in einem PHP-Forum, einem CMS oder einer Administrationsoberfläche – nur exakt die Privilegien geben, die für die Ausführung der jeweiligen Aufgabe notwendig sind, und darauf achten, dass Passwörter sicher sind und geheim bleiben. Temporäre Passwörter, die direkt nach der Registrierung oder auf Anforderung durch den Benutzer vergeben werden, sollten auf einem sicheren Weg (nicht im Klartext per E-Mail, wie leider meist üblich, sondern möglichst per SSL-geschützter HTTP-Verbindung) übergeben und vom Benutzer sofort geändert werden. Eine vollständige Besprechung der ISO 17799 bzw. der Nachfolger dieser Richtlinie würde den Rahmen dieses Buches sprengen. Sie ist jedoch als Zusammenfassung der Vorgänge und Arbeitsweisen, die guten Systemadministratoren in Fleisch und Blut übergegangen sind, eine wertvolle Hilfe. ISO 17799 kann kostenpflichtig im Internet direkt über den Onlineshop der ISO[7] bestellt werden. 1.6 Wie verkaufe ich Sicherheit? Wenn Sie dieses Buch lesen, sind Sie vielleicht auf irgendeine Weise professioneller PHP-Entwickler – entweder als freiberuflicher Programmierer oder als Angestellter in einem Unternehmen. Möchten Sie Ihre bestehenden PHP-Anwendungen sichern oder eine neue Anwendung mit besonderem Augenmerk auf die Sicherheit entwickeln, werden Sie feststellen, dass dies mit höherem Aufwand verbunden ist, als das Skript einfach »herunterzuhacken«. Ihr Auftrag- oder Arbeitgeber muss diesen Aufwand finanzieren, und Sie müssen begründen können, warum diese Zusatzkosten zwingend notwendig sind. Was für Sie völlig einleuchtend sein dürfte – schließlich hätten Sie sonst nicht dieses Buch gekauft, ist Managern oder Projektleitern oft leider nicht ganz so leicht zu vermitteln. Insbesondere in Unternehmen, deren Hauptgeschäftsfeld nicht die IT ist, ist die »Security Awareness«, also das Sicherheitsbewusstsein, oft nur ungenügend ausgeprägt. Das äußert sich in Problemen wie per Post-It-Haftnotiz am Monitor befestigten Passwörtern, aber auch in einer gewissen Naivität für Applikationssicherheit. Für Manager zählt hauptsächlich, wie sich eine Ausgabe rechnet: Ergibt sich nach Gegenrechnung aller Kosten noch immer ein Gewinn für das Unternehmen, sind Ausgaben leicht zu vermitteln. Sicherheit bringt allerdings direkt keine zusätzlichen Umsätze, ist also zunächst als Kostenfaktor ohne Gewinn einzustufen. Genauer betrachtet, stimmt das natürlich nicht – das müssen Sie dem Management vermitteln. Entwickeln Sie ein Softwareprodukt, das später von Ihrer Firma verkauft oder lizenziert werden soll, ist Sicherheit ein wichtiges Produktmerkmal, das die Verkäufe äußerst positiv beeinflussen kann. Setzen Sie webbasierte Anwendungen für das eigene Unternehmen ein, können Sie Datensicherheit nur dann gewährleisten, wenn die Anwendung gegen Diebstahl von Sessions, SQL-Injection und XSS abgeschottet ist. Der Verlust von Kundendaten kann ernste juristische Konsequenzen nach sich ziehen und zum Ruin Ihres Unternehmens führen. So musste das amerikanische Unternehmen CardSystems im Juni 2005 zugeben, dass die Kreditkartendaten von über 40 Millionen Kunden durch Hacker gestohlen worden waren.[8] Die Firma führte als sogenannter »Third Party Processor« Kreditkartentransaktionen im Auftrag von Händlern durch und leitete diese an die Kreditkartenunternehmen weiter. Da der Diebstahl durch eine Sicherheitslücke im Netzwerk des Unternehmens und fahrlässiges Verhalten einiger Mitarbeiter möglich wurde, kündigten daraufhin einige Kreditkartenfirmen ihre Verträge mit CardSystems und entzogen der Firma dadurch die Grundlage ihrer Dienstleistungen. Bei webbasierten Anwendungen ist ein Beispiel für den durch Sicherheitslücken entstehenden Vertrauensverlust das Portalsystem phpNuke. Obgleich die Idee und der Funktionsumfang von phpNuke prinzipiell sehr nützlich sind, hat die Menge an konzeptbedingten Sicherheitslücken das Open-Source-Projekt so weit diskreditiert, dass man von einer Installation inzwischen nur noch abraten kann. Auch das freie Forensystem phpBB hat in letzter Zeit durch viele kritische Sicherheitslücken, die unter anderem den Wurm »Santy« ermöglichten, von sich reden gemacht – einige Hosting-Firmen verbieten in der Konsequenz den Einsatz dieses Forums auf ihren Servern. Verdient Ihr Unternehmen sein Geld mit der Entwicklung und dem Verkauf webbasierter Applikationen, können solche Boykottaktionen empfindliche Umsatzeinbußen bedeuten – schon eine auf Security-Mailinglisten veröffentlichte kritische Lücke wird viele Administratoren davon abhalten, Kaufempfehlungen für Ihr Produkt auszusprechen. Denn: Wo ein Fehler ist, sind meist noch ein paar ähnliche Schnitzer, und viele Sicherheitslücken beruhen nicht nur auf nachlässiger Programmierung, sondern auf einem fehlerhaften Programmkonzept. Haben Sie Ihren guten Ruf als fähige Entwickler erst einmal durch einige Sicherheitslücken verspielt, ist es praktisch unmöglich, diesen wiederherzustellen – denken Sie nur an Sendmail, Bind oder wu-ftpd, die Musterbeispiele bekannter Open-Source-Produkte mit ellenlanger Fehlerliste. Neben den direkten Folgen juristischer oder strafrechtlicher Art hat ein »Hack« in einem Ihrer Produkte somit auch verheerende Auswirkungen auf den Ruf Ihrer Firma. Das sollten Sie und auch Ihre Vorgesetzten sich stets vor Augen führen, wenn es darum geht, auf Kosten der Sicherheit zu sparen.
1.7 Wichtige Informationsquellen Dieses Buch bemüht sich, Ihnen einen Überblick über die heute bekannten Angriffsklassen bei webbasierten Applikationen zu verschaffen, kann jedoch nie auf dem neuesten Stand sein. Serveradministratoren und PHP-Entwickler sollten daher andere Informationsquellen nutzen, um stets »up to date« zu sein. Das betrifft sowohl ganz konkrete Lücken in PHP-Applikationen als auch generelle Techniken und Konzepte. So tauchte etwa im Jahr 2005 die Angriffsklasse »HTTP Response Splitting« erstmals auf, die zuvor völlig unbekannt war und daher auch nur von wenigen Anwendungen abgefedert wurde. Derlei neuartige Angriffsmuster werden oft zunächst theoretisch in einer Veröffentlichung diskutiert, bevor sie praktisch implementiert und schließlich von Scriptkiddies aus aller Herren Länder ausgenutzt werden.
1.7.1 Mailinglisten Das Gros dieser Diskussionen findet auf den Mailinglisten »BugTraq«, »Full Disclosure« und »WebAppSec« statt. Insbesondere die ersten beiden Listen gelten als die besten Adressen für die neuesten Exploits und Fehler – jeder Serveradministrator ist in der Pflicht, mindestens eine der beiden zu abonnieren. Die übliche Netiquette gilt natürlich auch hier – insbesondere sollten Sie darauf achten, bei Abwesenheit nicht mit einem Autoresponder den mehreren Tausend anwesenden Hackern mitzuteilen, dass Ihre Server momentan leider ungeschützt sind, da Sie im Urlaub weilen. Autoresponder auf »BugTraq« sollen schon für den einen oder anderen Servereinbruch gesorgt haben – und zudem können Sie sicher sein, das Ziel des teilweise recht drastischen Spottes der Liste zu werden. Die Liste »Full Disclosure« ist nicht nur eine Mailingliste, sie steht für eine Art Lebensgefühl in der Security-Gemeinde. Mit »Full Disclosure« wird die Praktik beschrieben, Sicherheitslücken nach Bekanntwerden und Behebung durch den Softwarehersteller mit allen Details zu melden – und zwar eben an die Mailingliste Full Disclosure. Postings an FD, so der Kurzname der Liste, enthalten neben ausführlichen Informationen zu einer gefundenen Sicherheitslücke oft sogenannten »Proof of Concept«-Code, also ein kurzes Skript oder Programm, das das Vorhandensein der Lücke demonstriert. Da diese Nachweise eines Problems nicht selten den Entwicklern von Würmern, Rootkits oder Exploits als nützliche Vorlage dienen, ist Full Disclosure bei Sicherheitsexperten umstritten. Insbesondere ein großer Softwarehersteller aus Redmond hat sich in der Vergangenheit vehement gegen dieses Vorgehen gewehrt, sei es doch unverantwortlich und führe zu einer massiven Bedrohung der Internet-Infrastruktur. Auch das US-Heimatschutzministerium versuchte in der Vergangenheit, vollständige Veröffentlichungen von Lücken zu unterbinden, die US-Copyright-Gesetze im Digital Millenium Copyright Act (DMCA, siehe Glossar) sollten dabei helfen. Trotz dieser Widrigkeiten hält sich die Praxis der Full Disclosure weiterhin, was die Liste für Systemadministratoren zu einer unentbehrlichen Quelle macht: Zum einen werden Security-Hinweise (die sogenannten »Advisories«) auf keiner anderen Mailingliste so schnell veröffentlicht wie auf FD, und zum anderen kann die tatsächliche Gefahr, die von einer Lücke ausgeht, anhand der Liste gemessen werden. Sobald ein Exploit dort veröffentlicht wurde, können Sie davon ausgehen, dass jeder mit einfachsten Mitteln Angriffe gegen die verwundbare Software starten kann – spätestens dann sollten Sie eine Nachtschicht einlegen, um Ihre Systeme zu patchen. Da FD nicht moderiert wird, ist die Latenz zwischen Posting und Veröffentlichung zwar sehr kurz, es kommt jedoch fast täglich zu äußerst unangenehmen und ermüdenden Flamewars zwischen den anwesenden Security-Experten, vereinzelten Scriptkiddies und den wie auf jeder großen Liste reichlich vorhandenen Unruhestiftern. Diese Scharmützel ziehen sich teilweise über Tage hin und sorgen für ein sehr schlechtes Signal-Rausch-Verhältnis. Die Liste Full Disclosure sollte trotzdem Ihre tägliche Pflichtlektüre werden – abonnieren können Sie sie einfach mit einer Mail an die Adresse full-disclosure-request@lists.grok.org.uk; das Subject sollte »subscribe« (ohne Anführungszeichen) lauten. Alternativ können Sie über das Webinterface[9] ein Abonnement anfordern. Der Sicherheitsexperte Kurt Seifried betreibt eine inoffizielle, moderierte Version von Full Disclosure, auf der er unerwünschte oder überflüssige Postings ausfiltert. Diese Liste können Sie online[10] bestellen – ob Sie die Moderation durch einen Dritten benötigen, sollten Sie jedoch selbst entscheiden. Der zentrale Vorteil von Full-Disclosure – die geringe Latenz zwischen Veröffentlichung einer Sicherheitslücke und ihrem Bekanntwerden auf der Liste – geht so nämlich weitgehend verloren. 1.7.3 BugTraq Im Gegensatz zur ungefilterten Full Disclosure ist BugTraq eine moderierte Mailingliste. Der Moderator David Ahmad überprüft jedes Posting, um Flamewars und »Trolle«, also Störenfriede, nach Möglichkeit fernzuhalten. Der Traffic auf BugTraq ist daher meist um eine Größenordnung geringer als auf FD. Andererseits sind die Diskussionen dort bei Weitem nicht so lebhaft und aufschlussreich wie in der Nachbarliste – meist beschränken sich Postings auf Advisories aller Art. Sicherheitsexperten melden gefundene Lücken in Softwareprodukten, und die Hersteller reagieren mit einer Benachrichtigung, sobald das Problem behoben ist. Einen Gutteil des Verkehrs auf BugTraq machen Advisories der Anbieter von verschiedensten Linux-Distributionen aus, die ihre Nutzer auf sicherheitsrelevante Updates hinweisen. BugTraq ist mittlerweile mehr oder minder eine reine Ankündigungsliste, der Diskurs findet inzwischen an anderen Stellen statt. Wenn Sie Zeit sparen möchten, empfiehlt sich ein Abonnement dieser Mailingliste statt eines FD-Abos. BugTraq können Sie abonnieren, indem Sie eine leere Mail an die Adresse bugtraq-subscribe@securityfocus.com senden. 1.7.4 WebAppSec Für Entwickler von Webapplikationen hochinteressant ist die Liste WebAppSec (kurz für »Web Application Security«). Hier tauschen sich Webentwickler jeder Couleur über Sicherheitsfragen aus. Nicht nur Lücken und Exploits gehören zum Thema der Liste, sondern auch Diskussionen über den Einsatz von SSL, Webserver-Sicherheit und Firewalls. Auf der Liste gehen üblicherweise nicht mehr als zehn Postings pro Tag ein, und die Schnittmenge mit Beiträgen auf BugTraq oder Full Disclosure ist praktisch null. Daher sollten Sie ein Abonnement in Erwägung ziehen – Postings sind in der Regel von hoher Qualität und für Webentwickler interessant. Auch für ein WebAppSec-Abonnement genügt eine leere Mail, in diesem Fall an die Adresse webappsec-subscribe@securityfocus.com. 1.8 OWASP Open Web Application Security Project Eine der wichtigsten Ressourcen für an Sicherheit interessierte Webentwickler ist das Open Web Application Security Project, kurz OWASP. Hier versammeln sich Programmierer aus aller Herren Länder, um gemeinsame Richtlinien für Web Security zu definieren und zu pflegen. Eine sehr umfangreiche Bibliothek enthält Checklisten, How-Tos und Filterbibliotheken für verschiedene Sprachen. Ein Ziel des OWASP ist es, feste Standards zu definieren, die jeder Entwickler befolgen sollte, um ein Mindestmaß an Sicherheit für seine Applikationen garantieren zu können. Das Projekt stützt sich hierbei besonders auf die ISO-Richtlinie 17799 (bzw. ihr britisches Äquivalent BS7799). Zusätzlich gehen die Projektmitglieder auf andere internationale Standards für Sicherheit im Allgemeinen und speziell für Applikationssicherheit ein – für jeden Entwickler, dessen Software auf der ganzen Welt eingesetzt werden soll, ist die Konformität mit diesen Standards unverzichtbar. Von besonderem Interesse für jeden PHP-Entwickler ist der »Guide to Building Secure Web Applications and Web Services«[11]. Dieses über 200-seitige Dokument enthält zahlreiche Anregungen und Best Practices für Entwickler webbasierter Applikationen – auch die Autoren dieses Buches konnten noch das eine oder andere vom OWASP-Guide lernen. Ein weiteres interessantes Dokument ist die »OWASP Web Application Penetration Checklist«, die als Grundlage für die Security-Checkliste im Anhang diente. Neben den auch in unserem Buch enthaltenen sicherheitsrelevanten Punkten zum Abhaken geht sie auch auf den Ablauf eines »Pentests«, also eines Penetrationstests für Webapplikationen ein, um Entwicklern und externen Sicherheitsexperten Hilfestellung für Sicherheitsüberprüfungen zu geben. Das als PDF erhältliche Dokument steht – ebenso wie der »Guide for Building Secure Web Applications« – unter der GNU Documentation License und kann von jedermann frei verwendet, geändert und für die eigene Dokumentation eingesetzt werden. Die Teilnahme an der OWASP steht jedem offen – es werden für einige Themen noch Freiwillige gesucht, die Inhalte liefern können. Natürlich gibt es zu diesem Buch auch eine Website, getreu dem Motto »Nichts ist so alt wie die Sicherheitslücke von gestern«. Neben Errata und Aktualisierungen werden wir versuchen, in einem Weblog aktuelle Lücken in PHP-Applikationen aufzulisten und zu kommentieren. So können sich PHP-Entwickler an einem Ort über Lücken und Bugs in der von ihnen eingesetzten Software informieren und sparen sich im besten Falle das Abonnement der oben aufgeführten Security-Mailinglisten. Darüber hinaus werden Artikel zu PHP-Sicherheit und Vorträge über dieses Thema auf der Website[12] zum Buch veröffentlicht. [1] http://www.viruslist.com/en/viruses/encyclopedia?virusid=68388
[2] http://www.heise.de/newsticker/meldung/50516
[3] http://www.heise.de/newsticker/meldung/55057
[4] http://www.schneier.com/
[5] http://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html
[6] http://www.passcracking.com
[7] http://www.iso.org/
[8] http://www.heise.de/newsticker/meldung/60767 [9] https://lists.grok.org.uk/mailman/listinfo/full-disclosure
[10] http://lists.seifried.org/mailman/listinfo/security
[11] http://www.owasp.org/documentation/guide.html
[12] http://www.php-sicherheit.de/
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. Ich muss sagen, dass ich bei weitem nicht gedacht hätte, wie viele Angriffsmöglichkeiten und Schwachstellen es heutzutage geben kann (Session Fixation, Cross-Site Request Forgery, SQL-Injection, uvm.). Das Buch hat mir sehr geholfen, meinen Horizont in dieser Hinsicht zu erweitern. Es werden eine Menge Angriffsmöglichkeiten erklärt und ein möglicher Schutz dagegen erläutert. Bei einigen Angriffsarten waren mir die Gedankengänge der Autoren ab und zu leider etwas zu abstrus bzw. zu theoretisch erklärt und nur schwer nachvollziehbar. Bei einigen Angriffen wurde gezeigt, welchen Code man braucht, um zu "hacken" und bei anderen wurde leider nur theoretisch beschrieben, wie "Schadcode" eingeschleust werden kann. Hier hätte ich gerne auch noch ein handfestes Praxis-Beispiel gesehen, da in mir leider nicht so viel kriminelle Energie schlummert, als dass ich mir sowas selbst ausdenken könnte Neues Leserfeedback
Thorsten Wisser schreibt:
Übrigens: großes Lob an Euch, ist ein super Buch, habe die 1. Auflage. Hat mir sehr geholfen!!! 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. [...] Meiner Meinung nach ist dieses Buch die Referenz im PHP-Security-Bereich. Die vollständige Übersicht über mögliche Attacken und Präventionsmöglichkeiten gibt es - meines Erachtens nach - nirgends sonst in einem Buch vereint. Ein Must-Have, auch für stolze Besitzer der ersten Auflage.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:
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
(Page 1 of 2, totaling 17 entries)
» next page
|
SeitenLinksGetaggte Artikel-d allow_url_include
-s 4. Auflage Authentifizierung AuthN Buch CVE-2012-1823 CVE-2012-2311 dpunkt Errata exploit Konsole Linux-Magazin Linuxhotel month of php security open_basedir PC Welt PHP-CGI PHP 5.4.0 PKI RCE register_globals Remote Code Execution Rezension safe_mode Schulung Seminar Sicherheitslücke SSL stefan esser suhosin Webshell Workshop X.509 Zertifikat |