Sicherheit von PHP-Anwendungen: Die Top-10 Schwachstellen in der Praxis

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Sicherheit von PHP-Anwendungen: Die Top-10 Schwachstellen in der Praxis

PHP bleibt eine der beliebtesten Sprachen für die Webentwicklung, aber seine Flexibilität führt oft zu ernsthaften Sicherheitsproblemen. Laut OWASP stehen 80% der Angriffe auf Webanwendungen im Zusammenhang mit Schwachstellen, die bereits in der Codierungsphase verhindert werden können. In diesem Artikel analysieren wir die 10 häufigsten Schwachstellen von PHP-Anwendungen mit realen Codebeispielen und Schutzmethoden. Das Material ist sowohl für Anfänger als auch für erfahrene Entwickler nützlich.



1. SQL-Injection

Die gefährlichste und häufigste Schwachstelle. Der Angreifer gibt SQL-Code über Eingabefelder ein und erhält so Zugriff auf die Datenbank.

Verwundbarer Code:

$username = $_POST['username'];$query = "SELECT * FROM users WHERE username = '$username'";

Angriff: Die Eingabe ' OR '1'='1 verwandelt die Abfrage in SELECT * FROM users WHERE username = '' OR '1'='1' und gibt alle Benutzer zurück.

Schutz: Verwenden Sie vorbereitete Anweisungen (prepared statements) mit PDO:

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");$stmt->execute(['username' => $_POST['username']]);


2. XSS (Cross-Site Scripting)

Der Angreifer injiziert JavaScript-Code, der im Browser des Opfers ausgeführt wird. Es gibt drei Typen: reflected, stored und DOM-based.

Verwundbarer Code (stored XSS):

echo "<div>" . $comment . "</div>";

Schutz: Escapen Sie die Ausgabe mit htmlspecialchars():

echo "<div>" . htmlspecialchars($comment, ENT_QUOTES, 'UTF-8') . "</div>";

Für HTML-Inhalte verwenden Sie Bibliotheken wie HTML Purifier.



3. CSRF (Cross-Site Request Forgery)

Der Angriff zwingt einen autorisierten Benutzer, eine unerwünschte Aktion auf der Website auszuführen, z. B. eine Passwortänderung oder eine Überweisung.

Schutz: Implementieren Sie CSRF-Token:

// Token-Generierung$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

// Im Formularecho '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">';

// Überprüfungif ($_POST['csrf_token'] !== $_SESSION['csrf_token']) { die('CSRF-Angriff erkannt');}


4. Path Traversal (Verzeichnisdurchquerung)

Der Angreifer manipuliert Dateipfade, um Zugriff auf Systemdateien (/etc/passwd usw.) zu erhalten.

Verwundbarer Code:

$file = $_GET['file'];include("pages/" . $file);

Schutz: Verwenden Sie Whitelists oder die Funktion basename():

$allowed = ['home', 'about', 'contact'];$file = basename($_GET['file']);if (in_array($file, $allowed)) {    include("pages/$file.php");} else {    die('Ungültige Datei');}


5. File Upload Vulnerabilities (Schwachstellen beim Datei-Upload)

Der Angreifer lädt ein PHP-Skript anstelle eines Bildes hoch und erhält so Fernzugriff auf den Server.

Schutz:

  • Überprüfen Sie den MIME-Typ der Datei: $_FILES['file']['type']
  • Verwenden Sie finfo zur Bestimmung des tatsächlichen Typs
  • Verbieten Sie die Ausführung von Skripten im Upload-Ordner über .htaccess
  • Generieren Sie eindeutige Dateinamen: md5(uniqid()) . '.jpg'
$finfo = finfo_open(FILEINFO_MIME_TYPE);$mime = finfo_file($finfo, $_FILES['file']['tmp_name']);$allowed = ['image/jpeg', 'image/png'];if (!in_array($mime, $allowed)) {    die('Ungültiger Dateityp');}


6. Session Fixation (Sitzungsfixierung)

Der Angreifer zwingt dem Benutzer eine bekannte Sitzungs-ID auf, um diese nach der Anmeldung zu übernehmen.

Schutz: Nach erfolgreicher

Blogs

Buchempfehlungen