PHP-Sicherheit: PHP/MySQL-Webanwendungen sicher programmieren

Book description

PHP gilt mittlerweile als die beliebteste Skriptsprache für Webanwendungen. 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.

An nachvollziehbaren Beispielen lernen die Leser alle wichtigen Gefahren kennen, u.a.:

  • SQL-Injection

  • Cross-Site Scripting

  • Angriffe gegen Sessions

  • Angriffe auf Upload-Formulare

  • Cross-Site Request Forgery

  • HTTP Response Splitting

These links have been provided by the publisher.

Table of contents

  1. Copyright
  2. Danksagungen
  3. 1. Einleitung
    1. 1.1. Über dieses Buch
    2. 1.2. Was ist Sicherheit?
    3. 1.3. Wichtige Begriffe
    4. 1.4. Sicherheitskonzepte
    5. 1.5. ISO 17799
    6. 1.6. Wie verkaufe ich Sicherheit?
    7. 1.7. Wichtige Informationsquellen
      1. 1.7.1. Mailinglisten
      2. 1.7.2. Full Disclosure
      3. 1.7.3. BugTraq
      4. 1.7.4. WebAppSec
    8. 1.8. OWASP
    9. 1.9. PHP-Sicherheit.de
  4. 2. Informationsgewinnung
    1. 2.1. Grundlagen
    2. 2.2. Webserver erkennen
      1. 2.2.1. Server-Banner erfragen
      2. 2.2.2. Webserver-Verhalten interpretieren
      3. 2.2.3. Tools für Webserver-Fingerprinting
    3. 2.3. Betriebssystem erkennen
    4. 2.4. PHP-Installation erkennen
    5. 2.5. Datenbanksystem erkennen
    6. 2.6. Datei-Altlasten
      1. 2.6.1. Temporäre Dateien
      2. 2.6.2. Include- und Backup-Dateien
      3. 2.6.3. Dateien von Entwicklungswerkzeugen
      4. 2.6.4. Vergessene oder »versteckte« PHP-Dateien
      5. 2.6.5. Temporäre CVS-Dateien
    7. 2.7. Pfade
      1. 2.7.1. mod_speling
      2. 2.7.2. robots.txt
      3. 2.7.3. Standardpfade
      4. 2.7.4. Pfade verkürzen
    8. 2.8. Kommentare aus HTML-Dateien
    9. 2.9. Applikationen erkennen
      1. 2.9.1. Das Aussehen/Layout
      2. 2.9.2. Typische Dateien bekannter Applikationen
      3. 2.9.3. Header-Felder
      4. 2.9.4. Bestimmte Pfade
      5. 2.9.5. Kommentare im Quellcode
      6. 2.9.6. HTML-Metatags
    10. 2.10. Default-User
    11. 2.11. Google Dork
    12. 2.12. Fazit
  5. 3. Parametermanipulation
    1. 3.1. Grundlagen
    2. 3.2. Werkzeuge zur Parametermanipulation
      1. 3.2.1. Parametermanipulation mit dem Browser
      2. 3.2.2. Einen Proxy benutzen
    3. 3.3. Angriffsszenarien und Lösungen
      1. 3.3.1. Fehlererzeugung
      2. 3.3.2. HTTP Response Splitting
      3. 3.3.3. Remote Command Execution
      4. 3.3.4. Angriffe auf Dateisystemfunktionen
      5. 3.3.5. Angriffe auf Shell-Ebene
      6. 3.3.6. Cookie Poisoning
      7. 3.3.7. Manipulation von Formulardaten
      8. 3.3.8. Vordefinierte PHP-Variablen manipulieren
      9. 3.3.9. Spam über Mailformulare
    4. 3.4. Variablen richtig prüfen
      1. 3.4.1. Auf Datentyp prüfen
      2. 3.4.2. Datenlänge prüfen
      3. 3.4.3. Inhalte prüfen
      4. 3.4.4. Whitelist-Prüfungen
      5. 3.4.5. Blacklist-Prüfung
      6. 3.4.6. Clientseitige Validierung
    5. 3.5. register_globals
    6. 3.6. Fazit
  6. 4. Cross-Site Scripting
    1. 4.1. Grenzenlose Angriffe
    2. 4.2. Was ist Cross-Site Scripting?
    3. 4.3. Warum XSS gefährlich ist
    4. 4.4. Erhöhte Gefahr dank Browserkomfort
    5. 4.5. Formularvervollständigung verhindern
    6. 4.6. XSS in LANs und WANs
    7. 4.7. XSS – einige Beispiele
    8. 4.8. Ein klassisches XSS
    9. 4.9. Angriffspunkte für XSS
    10. 4.10. Angriffe verschleiern – XSS Cheat Sheet
    11. 4.11. Einfache Gegenmaßnahmen
    12. 4.12. XSS verbieten, HTML erlauben – wie?
      1. 4.12.1. BBCode
      2. 4.12.2. HTML-Filter mit XSS-Blacklist
      3. 4.12.3. Whitelist-Filtern mit »HTML Purifier«
    13. 4.13. Die Zwischenablage per XSS auslesen
    14. 4.14. XSS-Angriffe über DOM
    15. 4.15. XSS in HTTP-Headern
      1. 4.15.1. Angriffe der ersten Ordnung mit Headern
      2. 4.15.2. Second Order XSS per Header
    16. 4.16. Attack API
    17. 4.17. Second Order XSS per RSS
    18. 4.18. Cross-Site Request Forgery (CSRF)
      1. 4.18.1. CSRF als Firewall-Brecher
      2. 4.18.2. CSRF in BBCode
      3. 4.18.3. Ein erster Schutz gegen CSRF
      4. 4.18.4. CSRF-Schutzmechanismen
      5. 4.18.5. Formular-Token gegen CSRF
      6. 4.18.6. Unheilige Allianz: CSRF und XSS
  7. 5. SQL-Injection
    1. 5.1. Grundlagen
    2. 5.2. Auffinden von SQL-Injection-Möglichkeiten
      1. 5.2.1. GET-Parameter
      2. 5.2.2. POST-Parameter
      3. 5.2.3. Cookie-Parameter
      4. 5.2.4. Servervariablen
    3. 5.3. Syntax einer SQL-Injection
      1. 5.3.1. Sonderzeichen in SQL
      2. 5.3.2. Schlüsselwörter in SQL
      3. 5.3.3. Einfache SQL-Injection
      4. 5.3.4. UNION-Injections
    4. 5.4. Advanced SQL-Injection
      1. 5.4.1. LOAD_FILE
      2. 5.4.2. Denial of Service mit SQL-Injection
      3. 5.4.3. ORDER BY Injection
    5. 5.5. Schutz vor SQL-Injection
      1. 5.5.1. Sonderzeichen maskieren
      2. 5.5.2. Ist Schlüsselwort-Filterung ein wirksamer Schutz?
      3. 5.5.3. Parameter Binding/Prepared Statements
      4. 5.5.4. Stored Procedures
    6. 5.6. Fazit
  8. 6. Authentisierung und Authentifizierung
    1. 6.1. Wichtige Begriffe
      1. 6.1.1. Authentisierung
      2. 6.1.2. Authentifizierung
      3. 6.1.3. Autorisierung
    2. 6.2. Authentisierungssicherheit
      1. 6.2.1. SSL
      2. 6.2.2. Behandlung von Passwörtern
      3. 6.2.3. Benutzernamen und Kennungen
      4. 6.2.4. Sichere Passwörter
      5. 6.2.5. Passwort-Sicherheit bestimmen
      6. 6.2.6. Vergessene Passwörter
    3. 6.3. Authentifizierungssicherheit
      1. 6.3.1. Falsche Request-Methode
      2. 6.3.2. Falsche SQL-Abfrage
      3. 6.3.3. SQL-Injection
      4. 6.3.4. XSS
    4. 6.4. Spamvermeidung mit CAPTCHAs
    5. 6.5. Fazit
  9. 7. Sessions
    1. 7.1. Grundlagen
    2. 7.2. Permissive oder strikte Session-Systeme
    3. 7.3. Session-Speicherung
    4. 7.4. Schwache Algorithmen zur Session-ID-Generierung
    5. 7.5. Session-Timeout
    6. 7.6. Bruteforcing von Sessions
    7. 7.7. Session Hijacking
    8. 7.8. Session Fixation
    9. 7.9. Zusätzliche Abwehrmethoden
      1. 7.9.1. Page-Ticket-System
      2. 7.9.2. Session-Dateien mittels Cronjob löschen
      3. 7.9.3. Session-ID aus dem Referrer löschen
    10. 7.10. Fazit
  10. 8. Upload-Formulare
    1. 8.1. Grundlagen
    2. 8.2. Aufbau eines Upload-Formulars
    3. 8.3. PHP-interne Verarbeitung
    4. 8.4. Speicherung der hochgeladenen Dateien
    5. 8.5. Bildüberprüfung
    6. 8.6. PHP-Code in ein Bild einfügen
    7. 8.7. Andere Dateitypen überprüfen
    8. 8.8. Gefährliche Zip-Archive
    9. 8.9. Fazit
  11. 9. Variablenfilter mit ext/filter
    1. 9.1. Überblick
    2. 9.2. Installation
    3. 9.3. Die Filter-API
    4. 9.4. Verfügbare Filter
      1. 9.4.1. Validierende Filter
      2. 9.4.2. Reinigende Filter
    5. 9.5. Zahlen prüfen und filtern
    6. 9.6. Boolesche Werte
    7. 9.7. URLs validieren
    8. 9.8. IP-Adressen prüfen
    9. 9.9. Syntaxcheck für E-Mail-Adressen
    10. 9.10. Reinigende Filter
    11. 9.11. Prüfung externer Daten
    12. 9.12. Callback-Funktionen
    13. 9.13. Fazit
  12. 10. PHP intern
    1. 10.1. Fehler in PHP
      1. 10.1.1. Month of PHP Bugs
      2. 10.1.2. File-Upload-Bug
      3. 10.1.3. Unsichere (De-)Serialisierung
      4. 10.1.4. Verwirrter Speichermanager
      5. 10.1.5. Speicherproblem dank htmlentities
      6. 10.1.6. Bewertung
    2. 10.2. Bestandteile eines sicheren Servers
    3. 10.3. Unix oder Windows?
    4. 10.4. Bleiben Sie aktuell!
    5. 10.5. Installation
      1. 10.5.1. Installation als Apache-Modul
      2. 10.5.2. CGI
    6. 10.6. suExec
    7. 10.7. Safe Mode
      1. 10.7.1. Einrichtung des Safe Mode
      2. 10.7.2. safe_mode_exec_dir
      3. 10.7.3. safe_mode_include_dir
      4. 10.7.4. Umgebungsvariablen im Safe Mode
      5. 10.7.5. Safe Mode considered harmful?
    8. 10.8. Weitere PHP-Einstellungen
      1. 10.8.1. open_basedir
      2. 10.8.2. disable_functions
      3. 10.8.3. disable_classes
      4. 10.8.4. max_execution_time
      5. 10.8.5. max_input_time
      6. 10.8.6. memory_limit
      7. 10.8.7. Upload-Einstellungen
      8. 10.8.8. allow_url_fopen
      9. 10.8.9. allow_url_include
      10. 10.8.10. register_globals
    9. 10.9. Code-Sandboxing mit runkit
    10. 10.10. Externe Ansätze
      1. 10.10.1. suPHP
      2. 10.10.2. FastCGI
      3. 10.10.3. Das Apache-Modul mod_suid
    11. 10.11. Rootjail-Lösungen
      1. 10.11.1. BSD-Rootjails
      2. 10.11.2. User Mode Linux
      3. 10.11.3. mod_security
      4. 10.11.4. mod_chroot
    12. 10.12. Fazit
  13. 11. PHP-Hardening
    1. 11.1. Warum PHP härten?
      1. 11.1.1. Buffer Overflows
      2. 11.1.2. Schutz vor Pufferüberläufen im Suhosin-Patch
      3. 11.1.3. Schutz vor Format-String-Schwachstellen
      4. 11.1.4. Simulationsmodus
      5. 11.1.5. Include-Schutz gegen Remote-Includes und Nullbytes
      6. 11.1.6. Funktions- und Evaluationsbeschränkungen
      7. 11.1.7. Schutz gegen Response Splitting und Mailheader Injection
      8. 11.1.8. Variablenschutz
      9. 11.1.9. SQL Intrusion Detection
      10. 11.1.10. Logging
      11. 11.1.11. Transparente Cookie- und Session-Verschlüsselung
      12. 11.1.12. Härtung des Speicherlimits
      13. 11.1.13. Transparenter phpinfo() Schutz
      14. 11.1.14. Kryptografische Funktionen
    2. 11.2. Prinzipien hinter Suhosin
    3. 11.3. Installation
      1. 11.3.1. Installation des Patch
      2. 11.3.2. Installation der Extension
    4. 11.4. Zusammenarbeit mit anderen Zend-Extensions
    5. 11.5. Konfiguration
      1. 11.5.1. Generelle Optionen
      2. 11.5.2. Log-Dateien
      3. 11.5.3. Alarmskript
      4. 11.5.4. Transparente Verschlüsselung
      5. 11.5.5. Variablenfilter
      6. 11.5.6. Upload-Konfiguration
    6. 11.6. Beispielkonfiguration
    7. 11.7. Fazit und Ausblick
  14. 12. Webserver-Filter für Apache
    1. 12.1. Einsatzgebiet von Filtermodulen
    2. 12.2. Blacklist oder Whitelist?
    3. 12.3. mod_security
      1. 12.3.1. So funktioniert's
      2. 12.3.2. Gefahren durch mod_security
      3. 12.3.3. Installation
      4. 12.3.4. Konfiguration
      5. 12.3.5. Regelwerk von mod_security
      6. 12.3.6. Alarmskript für mod_security
      7. 12.3.7. Rootjail-Umgebungen mit mod_security
      8. 12.3.8. mod_security 2
    4. 12.4. mod_parmguard
      1. 12.4.1. So funktioniert's
      2. 12.4.2. Installation
      3. 12.4.3. Webserver-Konfiguration
      4. 12.4.4. XML-Whitelist manuell erstellen
      5. 12.4.5. Automatische Erzeugung
    5. 12.5. Fazit
  15. I. Anhang
    1. A. Checkliste für sichere Webapplikationen
    2. B. Wichtige Optionen in php.ini
      1. B.1. B.1 variables_order
      2. B.2. B.2 register_globals
      3. B.3. B.3 register_long_arrays
      4. B.4. B.4 register_argc_argv
      5. B.5. B.5 post_max_size
      6. B.6. B.6 magic_quotes_gpc
      7. B.7. B.7 magic_quotes_runtime
      8. B.8. B.8 always_populate_raw_post_data
      9. B.9. B.9 allow_url_fopen
      10. B.10. B.10 allow_url_include
    3. C. Liste aller Schwachstellen mit Gefahrenpotenzial-Bewertung
      1. C.1. C.1 Cross-Site Scripting
      2. C.2. C.2 Information Disclosure
      3. C.3. C.3 Full Path Disclosure
      4. C.4. C.4 SQL-Injection
      5. C.5. C.5 HTTP Response Splitting
      6. C.6. C.6 Cross-Site Request Forgery
      7. C.7. C.7 Remote Command Execution
      8. C.8. C.8 Mail-Header Injection
    4. D. Glossar

Product information

  • Title: PHP-Sicherheit: PHP/MySQL-Webanwendungen sicher programmieren
  • Author(s): Christopher Kunz, Stefan Esser
  • Release date: June 2008
  • Publisher(s): dpunkt
  • ISBN: 9783898645355