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

Top-10 Schwachstellen von PHP-Anwendungen: So schützen Sie Ihren Code



PHP bleibt eine der beliebtesten Sprachen für die Webentwicklung. Allerdings führen seine Flexibilität und Einfachheit oft zum Auftreten kritischer Schwachstellen. Laut OWASP-Statistik haben über 70 % der Webanwendungen mindestens eine schwerwiegende Sicherheitslücke. In diesem Artikel analysieren wir die 10 häufigsten Schwachstellen von PHP-Anwendungen, zeigen Beispiele für gefährlichen Code und geben praktische Empfehlungen zum Schutz.



1. SQL-Injection



Der bekannteste und gefährlichste Angriff. Der Angreifer schleust SQL-Code über Benutzereingaben ein.



Gefährlicher Code:

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


Sicherer Code (Verwendung vorbereiteter Abfragen):

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


Empfehlungen:

  • Verwenden Sie immer vorbereitete Anweisungen (PDO oder MySQLi).
  • Verknüpfen Sie niemals Benutzerdaten in SQL-Abfragen.
  • Validieren Sie Datentypen (z. B. is_numeric() für IDs).


2. XSS (Cross-Site Scripting)



Einschleusen von JavaScript-Code auf die Seite durch ungeprüfte Daten. Diebstahl von Cookies, Weiterleitung auf Phishing-Seiten.



Gefährlicher Code:

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


Sicherer Code:

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


Empfehlungen:

  • Maskieren Sie die Ausgabe mit htmlspecialchars().
  • Setzen Sie Content-Security-Policy (CSP) in den Headern.
  • Verwenden Sie für JSON-Antworten json_encode().


3. CSRF (Cross-Site Request Forgery)



Der Angreifer zwingt einen authentifizierten Benutzer, eine unerwünschte Aktion auszuführen (z. B. Geldüberweisung).



Beispiel eines Formulars ohne Schutz:

<form action="delete.php" method="POST">    <input type="hidden" name="id" value="123">    <input type="submit" value="Löschen"></form>


Sicherer Code (mit Token):

<?phpsession_start();if (empty($_SESSION['token'])) {    $_SESSION['token'] = bin2hex(random_bytes(32));}?><form action="delete.php" method="POST">    <input type="hidden" name="token" value="<?= $_SESSION['token'] ?>">    <input type="hidden" name="id" value="123">    <input type="submit" value="Löschen"></form>


Empfehlungen:

  • Generieren Sie eindeutige CSRF-Token für jedes Formular.
  • Überprüfen Sie Token auf dem Server, bevor Sie Aktionen ausführen.
  • Verwenden Sie SameSite-Cookies (Lax oder Strict).


4. Fehlerhafte Authentifizierung und Sitzungsverwaltung



Schwacher Sitzungsschutz, Identifikator-Leck, Session Fixation.



Verwundbarer Code:

<?phpsession_start();if ($_POST['password'] == 'admin123') {    $_SESSION['logged'] = true;}?>


Sicherer Code:

<?phpsession_start();session_regenerate_id(true); // Sitzungs-ID nach Login ändern

// Passwort-Hashing$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);if (password_verify($input_password, $hash)) { $_SESSION['logged'] = true; $_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];}?>


Empfehlungen:

  • Verwenden Sie password_hash() und password_verify().
  • Regenerieren Sie die Sitzungs-ID nach dem Login.
  • Überprüfen Sie den User-Agent und die IP-Adresse (optional).

Blogs

Buchempfehlungen