Input Validation: Benutzereingaben sicher verarbeiten | Enjyn Gruppe
Hallo Welt
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

241 Dokumentationen verfügbar

Wissensdatenbank

Input Validation Sanitization

Zuletzt aktualisiert: 20.01.2026 um 10:06 Uhr

Input Validation: Benutzereingaben sicher verarbeiten

Niemals Benutzereingaben vertrauen! Dieser Guide zeigt, wie Sie Eingaben validieren und sanitisieren, um Ihre Anwendung zu schützen.

Validation vs. Sanitization

Konzept Beschreibung Beispiel
Validation Prüft ob Eingabe gültig ist Ist es eine gültige E-Mail?
Sanitization Bereinigt/transformiert Eingabe HTML-Tags entfernen

Wichtige Grundregeln

Goldene Regeln:
  • Validiere auf dem Server (Client-Validierung kann umgangen werden)
  • Whitelist statt Blacklist (erlaube nur bekannte Werte)
  • Sanitisiere bei der Ausgabe, nicht nur bei der Eingabe
  • Verwende parametrisierte Queries für Datenbanken

PHP Validation

<?php
// Filter-Funktionen
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
$url = filter_var($_POST['website'], FILTER_VALIDATE_URL);
$int = filter_var($_POST['age'], FILTER_VALIDATE_INT, [
    'options' => ['min_range' => 0, 'max_range' => 120]
]);

// Prüfung
if ($email === false) {
    $errors[] = 'Ungültige E-Mail-Adresse';
}

// Sanitization
$name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
$html = filter_var($_POST['content'], FILTER_SANITIZE_FULL_SPECIAL_CHARS);

// Eigene Validierung
function validateUsername(string $username): bool {
    // Nur Buchstaben, Zahlen, Unterstriche, 3-20 Zeichen
    return preg_match('/^[a-zA-Z0-9_]{3,20}$/', $username) === 1;
}

// Trim und Längenprüfung
$input = trim($_POST['title']);
if (strlen($input) > 255) {
    $errors[] = 'Titel zu lang (max. 255 Zeichen)';
}

JavaScript Validation

// Clientseitig (für UX, nicht für Sicherheit!)
function validateEmail(email) {
    const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return regex.test(email);
}

function validateForm(form) {
    const errors = [];

    const email = form.email.value.trim();
    if (!validateEmail(email)) {
        errors.push('Ungültige E-Mail');
    }

    const password = form.password.value;
    if (password.length < 8) {
        errors.push('Passwort mindestens 8 Zeichen');
    }

    const age = parseInt(form.age.value);
    if (isNaN(age) || age < 0 || age > 120) {
        errors.push('Ungültiges Alter');
    }

    return errors;
}

// Node.js mit express-validator
const { body, validationResult } = require('express-validator');

app.post('/register', [
    body('email').isEmail().normalizeEmail(),
    body('password').isLength({ min: 8 }),
    body('username').trim().isAlphanumeric().isLength({ min: 3, max: 20 }),
    body('age').isInt({ min: 0, max: 120 })
], (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
        return res.status(400).json({ errors: errors.array() });
    }
    // Weiter verarbeiten...
});

Typische Validierungen

// E-Mail
/^[^\s@]+@[^\s@]+\.[^\s@]+$/

// URL
/^https?:\/\/.+/

// Telefonnummer (DE)
/^(\+49|0)[1-9]\d{1,14}$/

// PLZ (DE)
/^\d{5}$/

// Username
/^[a-zA-Z0-9_]{3,20}$/

// Passwort (min. 8 Zeichen, Groß/Klein, Zahl, Sonderzeichen)
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/

// Datum (YYYY-MM-DD)
/^\d{4}-\d{2}-\d{2}$/

// UUID
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i

Sanitization für Ausgabe

<?php
// HTML-Ausgabe (verhindert XSS)
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');

// In JavaScript
const escaped = document.createTextNode(userInput).textContent;

// Oder mit Library
// DOMPurify für HTML-Inhalt
import DOMPurify from 'dompurify';
const clean = DOMPurify.sanitize(dirtyHTML);

Datei-Upload Validation

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

// MIME-Type prüfen (nicht auf Extension verlassen!)
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mimeType = $finfo->file($_FILES['upload']['tmp_name']);

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

if ($_FILES['upload']['size'] > $maxSize) {
    die('Datei zu groß');
}

// Dateiname sanitisieren
$filename = preg_replace('/[^a-zA-Z0-9_.-]/', '', $_FILES['upload']['name']);
$filename = substr($filename, 0, 100); // Länge begrenzen

// Zufälligen Namen verwenden
$newName = bin2hex(random_bytes(16)) . '.' . pathinfo($filename, PATHINFO_EXTENSION);

Checkliste

Input Validation Checkliste:
  • Serverseitige Validierung implementiert
  • Eingabelängen begrenzt
  • Datentypen geprüft
  • Whitelist für erlaubte Werte
  • Sanitization bei der Ausgabe
  • Parametrisierte DB-Queries
  • Datei-Uploads geprüft

Weitere Informationen

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
120