Sicherheit von PHP-Anwendungen: Top-10-Schwachstellen für Anfänger

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 für Anfänger

\n

PHP bleibt eine der beliebtesten Sprachen für die Webentwicklung, aber seine Flexibilität führt oft zu Schwachstellen, wenn grundlegende Sicherheitsregeln nicht beachtet werden. Laut OWASP sind die meisten Hacks auf 10 typische Fehler zurückzuführen, die Anfänger-Entwickler machen. In diesem Artikel analysieren wir jede Schwachstelle mit realen Codebeispielen und zeigen, wie Sie Ihre Anwendung schützen können.

\n\n

1. SQL-Injection

\n

Der häufigste Angriff. Der Angreifer injiziert bösartigen SQL-Code über Benutzereingaben.

\n

Angreifbarer Code:

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

Schutz: Verwenden Sie vorbereitete Anweisungen (prepared statements):

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

2. XSS (Cross-Site Scripting)

\n

Einschleusen von JavaScript-Code auf die Seite durch ungeprüfte Daten.

\n

Angreifbarer Code:

\n
<?php\necho "Hallo, " . $_GET['name'];\n?>
\n

Schutz: Maskieren Sie die Ausgabe mit htmlspecialchars():

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

3. CSRF (Cross-Site Request Forgery)

\n

Ein Angriff, bei dem der Benutzer ungewollte Aktionen in seinem Namen ausführt.

\n

Angreifbarer Code:

\n
<form action="/delete.php" method="POST">\n    <input type="submit" value="Konto löschen">\n</form>
\n

Schutz: Fügen Sie ein CSRF-Token hinzu:

\n
<?php\nsession_start();\n$_SESSION['csrf_token'] = bin2hex(random_bytes(32));\n?>\n<form action="/delete.php" method="POST">\n    <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">\n    <input type="submit" value="Konto löschen">\n</form>
\n\n

4. Unsichere Passwortspeicherung

\n

Speicherung von Passwörtern im Klartext oder mit veralteten Hashes (MD5, SHA1).

\n

Angreifbarer Code:

\n
<?php\n$password = md5($_POST['password']);\n// oder\n$password = sha1($_POST['password']);\n?>
\n

Schutz: Verwenden Sie password_hash() und password_verify():

\n
<?php\n$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);\n// Überprüfung:\nif (password_verify($input_password, $hash)) {\n    echo "Passwort korrekt";\n}\n?>
\n\n

5. Unsichere Dateiarbeit (Local/Remote File Inclusion)

\n

Einbinden von Dateien über Benutzereingaben ohne Prüfung.

\n

Angreifbarer Code:

\n
<?php\ninclude($_GET['page'] . '.php');\n?>
\n

Schutz: Verwenden Sie eine Whitelist erlaubter Dateien:

\n
<?php\n$allowed_pages = ['home', 'about', 'contact'];\n$page = $_GET['page'] ?? 'home';\nif (in_array($page, $allowed_pages)) {\n    include($page . '.php');\n} else {\n    include('404.php');\n}\n?>
\n\n

6. Falsche Sitzungskonfiguration

\n

Verwendung vorhersagbarer Sitzungs-IDs oder fehlende Regenerierung.

\n

Angreifbarer Code:

\n
<?php\nsession_start();\n$_SESSION['user_id'] = $user_id;\n// Sitzung wird nach dem Login nicht regeneriert\n?>
\n

Schutz:

\n
<?php\nsession_start();\nsession_regenerate_id(true); // ID-Regenerierung nach dem Login\n$_SESSION['user_id'] = $user_id;\n?>
\n\n

7. Unzureichende Eingabevalidierung

\n

Vertrauen in beliebige Benutzerdaten.

\n

An

Blogs

Buchempfehlungen