Sicherheit von PHP-Anwendungen: Top-10 Schwachstellen und Schutz

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: Top-10 Schwachstellen und Schutzmethoden



PHP bleibt eine der beliebtesten Sprachen für die Webentwicklung, jedoch führt seine Flexibilität oft zu Schwachstellen. Laut Sicherheitsberichten weisen über 70 % der Webanwendungen mindestens eine kritische Schwachstelle auf. In diesem Artikel analysieren wir die Top-10 der gefährlichsten PHP-Schwachstellen, zeigen reale Codebeispiele und erläutern, wie Sie Ihre Anwendung effektiv schützen können.



1. SQL-Injection

Die häufigste und gefährlichste Schwachstelle. Ein Angreifer kann über Benutzereingaben beliebigen SQL-Code einschleusen.



Verwundbarer Code:

<?php$id = $_GET['id'];$query = "SELECT * FROM users WHERE id = $id";$result = mysqli_query($conn, $query);?>


Schutz: Verwendung von Prepared Statements:

<?php$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");$stmt->bind_param("i", $_GET['id']);$stmt->execute();$result = $stmt->get_result();?>


2. XSS (Cross-Site Scripting)

Einschleusen schädlicher Skripte in Webseiten. Es gibt drei Typen: Reflected, Stored und DOM-based.



Verwundbarer Code:

<?phpecho "Hallo, " . $_GET['name'];?>


Schutz: Ausgabe escapen:

<?phpecho "Hallo, " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');?>


3. CSRF (Cross-Site Request Forgery)

Ein Angriff, bei dem ein Angreifer einen Benutzer dazu zwingt, unerwünschte Aktionen auf einer Website auszuführen, bei der dieser authentifiziert ist.



Schutz: Verwendung von CSRF-Tokens:

<?phpsession_start();if (empty($_SESSION['csrf_token'])) {    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));}

// Überprüfung beim Absenden des Formularsif ($_POST['csrf_token'] !== $_SESSION['csrf_token']) { die('CSRF-Angriff erkannt!');}?>

<form method="POST"> <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>"> <button type="submit">Senden</button></form>


4. Path Traversal

Eine Schwachstelle, die das Lesen beliebiger Dateien auf dem Server ermöglicht.



Verwundbarer Code:

<?php$file = $_GET['file'];include("pages/" . $file);?>


Schutz: Validierung und Einschränkung von Pfaden:

<?php$allowed_files = ['about.php', 'contact.php', 'home.php'];$file = basename($_GET['file']);

if (in_array($file, $allowed_files)) { include("pages/" . $file);} else { die('Zugriff verweigert');}?>


5. File Upload

Unsicherer Dateiupload kann zur Ausführung beliebigen Codes auf dem Server führen.



Schutz: Überprüfung von MIME-Typ und Dateierweiterung:

<?php$allowed_types = ['image/jpeg', 'image/png', 'image/gif'];$max_size = 5 * 1024 * 1024; // 5 MB

if ($_FILES['file']['size'] > $max_size) { die('Datei ist zu groß');}

$finfo = finfo_open(FILEINFO_MIME_TYPE);$mime_type = finfo_file($finfo, $_FILES['file']['tmp_name']);

if (!in_array($mime_type, $allowed_types)) { die('Ungültiger Dateityp');}

// Datei aus Sicherheitsgründen umbenennen$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);$new_name = md5(uniqid()) . '.' . $extension;move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $new_name);?>


6. Session Fixation

Ein Angriff, bei dem ein Angreifer dem Benutzer eine bekannte Session-ID aufzwingt.



Schutz: Regeneration der Session-ID:

<?phpsession_start();

// Nach erfolgreicher Authentifizierungi

Blogs

Buchempfehlungen