Benutzereingaben bereinigen
Entfernen Sie gefährliche Zeichen mit htmlspecialchars und filter_input.
Benutzereingaben bereinigen ist eine kostenlose PHP Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des PHP Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.
Bereinigung und Validierung im Vergleich
Validierung prüft, ob Daten die Anforderungen erfüllen, und weist sie andernfalls zurück.
Bereinigung entfernt gefährliche Zeichen aus Daten oder kodiert sie, damit sie sicher verwendet werden können.
Beides ist erforderlich – validieren Sie zuerst und bereinigen Sie anschließend für die Ausgabe.
htmlspecialchars() für HTML-Ausgaben
Maskieren Sie Ausgaben immer, bevor Sie sie in HTML einfügen, um XSS zu verhindern:
<?php
$name = '<script>alert(1)</script>';
// Dangerous — executes script:
// echo $name;
// Safe:
echo htmlspecialchars($name, ENT_QUOTES | ENT_HTML5, 'UTF-8');
// <script>alert(1)</script>htmlentities() und htmlspecialchars() im Vergleich
Beide maskieren HTML, aber htmlentities konvertiert ALLE anwendbaren Zeichen, während htmlspecialchars nur die fünf gefährlichsten Zeichen konvertiert:
<?php
$str = '<b>café</b> & "bar"';
// htmlspecialchars: only & < > ' "
echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
// htmlentities: also converts é → é
echo htmlentities($str, ENT_QUOTES, 'UTF-8');
// Prefer htmlspecialchars — htmlentities can break UTF-8filter_var FILTER_SANITIZE_*
Die Bereinigungsmodi von filter_var entfernen gefährliche Inhalte:
<?php
$rawEmail = 'user(bad)@exam<ple.com';
$clean = filter_var($rawEmail, FILTER_SANITIZE_EMAIL);
echo $clean; // user@example.com
$rawUrl = 'http://exa mple.com/pa th?q=foo bar';
$cleanUrl = filter_var($rawUrl, FILTER_SANITIZE_URL);
echo $cleanUrl;strip_tags()
Entfernen Sie HTML-Tags aus einer Zeichenfolge. Optional können Sie erlaubte Tags beibehalten:
<?php
$input = '<p>Hello <b>World</b> <script>alert(1)</script></p>';
// Remove all tags:
echo strip_tags($input);
// Hello World alert(1)
// Keep only <b> and <i>:
echo strip_tags($input, '<b><i>');
// Hello <b>World</b>Bereinigung für SQL
Bereinigen Sie SQL niemals mit Zeichenfolgenfunktionen – verwenden Sie immer vorbereitete Anweisungen. Der richtige Ansatz:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
// WRONG — even with addslashes this is dangerous:
// $sql = "SELECT * FROM users WHERE email = '" . addslashes($email) . "'";
// CORRECT — prepared statement:
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute([':email' => $email]);
$user = $stmt->fetch();addslashes() und vorbereitete Anweisungen im Vergleich
addslashes() maskiert Backslashes und Anführungszeichen – ist aber für SQL NICHT sicher. Verwenden Sie stattdessen vorbereitete PDO-Anweisungen. addslashes() kann für Zwecke außerhalb von SQL weiterhin nützlich sein, etwa zum Erzeugen von JavaScript-Zeichenfolgen:
<?php
// For embedding PHP string into JavaScript (still escape via json_encode):
$jsData = json_encode(['name' => $userInput], JSON_HEX_QUOT);
echo "<script>var data = $jsData;</script>";Dateinamen bereinigen
Entfernen Sie gefährliche Zeichen aus den Namen hochgeladener Dateien:
<?php
function sanitizeFilename(string $name): string {
// Remove path traversal chars and other dangerous ones
$name = basename($name); // strip any path
$name = preg_replace('/[^a-zA-Z0-9._-]/', '_', $name); // only safe chars
$name = preg_replace('/_{2,}/', '_', $name); // collapse underscores
return strtolower($name);
}
echo sanitizeFilename('../../../etc/passwd'); // etc_passwd
echo sanitizeFilename('My Photo (1).JPG'); // my_photo_1_.jpgInteger-Casting für IDs
Die einfachste Bereinigung numerischer IDs: Wandeln Sie sie in int um. Dabei werden alle nicht numerischen Inhalte verworfen:
<?php
// Never do this:
$id = $_GET['id'];
$sql = "SELECT * FROM posts WHERE id = $id";
// Safe approach 1: cast to int
$id = (int) ($_GET['id'] ?? 0);
if ($id <= 0) die('Invalid ID');
// Safe approach 2: validate
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if (!$id) die('Invalid ID');Der Ausgabekontext ist entscheidend
Für unterschiedliche Ausgabekontexte ist eine unterschiedliche Maskierung erforderlich:
- HTML-Body →
htmlspecialchars() - HTML-Attribut →
htmlspecialchars(ENT_QUOTES) - JSON/JavaScript →
json_encode() - URL-Parameter →
urlencode() - SQL → vorbereitete Anweisungen
urlencode und rawurlencode
Kodieren Sie Werte für die Verwendung in URLs:
<?php
$search = 'hello world & PHP';
echo urlencode($search);
// hello+world+%26+PHP (+ for spaces)
echo rawurlencode($search);
// hello%20world%20%26%20PHP (RFC 3986 — use in paths)
$url = 'https://example.com/search?q=' . urlencode($search);
echo $url;Schnelltest
Welche Funktion ist der richtige Weg, um SQL-Injection zu verhindern, wenn Benutzereingaben in einer Datenbankabfrage verwendet werden?
Zusammenfassung: Eingaben bereinigen
Regeln für die Bereinigung:
- HTML-Ausgabe →
htmlspecialchars(ENT_QUOTES, 'UTF-8') - SQL → vorbereitete Anweisungen, niemals Maskierung mit Zeichenfolgenfunktionen
- URLs →
urlencode()oderrawurlencode() - Dateinamen → mit regulären Ausdrücken bereinigen,
basename()verwenden - Integer-IDs → mit
(int)umwandeln - Tags →
strip_tags()zum Filtern erlaubter Tags
Häufig gestellte Fragen
Ist die Lektion „Benutzereingaben bereinigen“ kostenlos?
Ja — der vollständige Text von „Benutzereingaben bereinigen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des PHP Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Benutzereingaben bereinigen“?
Entfernen Sie gefährliche Zeichen mit htmlspecialchars und filter_input. Du übst PHP Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um PHP Academy zu starten?
Keine Vorkenntnisse erforderlich. PHP Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Benutzereingaben bereinigen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser PHP Academy-Lektion Code schreiben und ausführen?
Ja. Jede PHP Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- GET vs. POST: Wann Sie welche Methode verwenden
- Formulardaten mit Superglobals auslesen
- Techniken zur Eingabevalidierung
- Benutzereingaben bereinigen