Benutzereingaben mit PHP validieren

Benutzereingaben mit PHP validieren

Warum ist die Validierung der Eingabe wichtig?

In der Welt der Webentwicklung ist die Validierung von Benutzereingaben ein kritischer Aspekt, wenn es darum geht, die Sicherheit und Funktionalität deiner Anwendung zu gewährleisten. Benutzereingaben können potenziell schädlich sein, indem sie unsichere oder unerwartete Daten an den Server senden. Daher ist es wichtig, dass wir sicherstellen, dass alle eingehenden Daten unseren Erwartungen entsprechen, bevor wir sie in unserer Anwendung verwenden.

Ein gutes Beispiel für die Verwendung von Benutzereingaben ist ein Kontaktformular, bei dem Benutzer ihren Namen, ihre E-Mail-Adresse und eine Nachricht eingeben können. Der unten stehende Code ist ein einfaches Beispiel für ein solches Formular. Es sendet die Benutzereingaben an ein PHP-Skript, das sie verarbeitet und eine E-Mail mit der eingegebenen Nachricht sendet.

Ausgangscode HTML:

<!DOCTYPE html>
<html>
<body>
 
<h1>Kontaktformular</h1>
 
<form action="mailversand.php" method="post">
  Name: <input type="text" name="name"><br>
  E-Mail: <input type="text" name="email"><br>
  Nachricht: <textarea name="message"></textarea><br>
  <input type="submit">
</form>
 
</body>
</html>

Ausgangscode PHP:

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
 
$headers = 'From: ' . $email;
$to = 'deine-email@beispiel.de';  // Hier solltest du deine E-Mail-Adresse eingeben
$subject = 'Neue Nachricht von ' . $name;
 
if (mail($to, $subject, $message, $headers)) {
    echo "E-Mail erfolgreich gesendet!";
} else {
    echo "E-Mail konnte nicht gesendet werden.";
}
?>

Diesem Code fehlt etwas Wichtiges: die Validierung der Benutzereingaben. Der PHP-Code nimmt an, dass die Eingaben sicher und gültig sind, aber das ist nicht immer der Fall. Daher ist es wichtig, dass wir die Eingaben validieren, bevor wir sie verwenden.

PHP Validierungsfunktion einbinden

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];

$headers = 'From: ' . $email;
$to = 'deine-email@beispiel.de';
$subject = 'Neue Nachricht von ' . $name;

if (mail($to, $subject, $message, $headers)) {
    echo "E-Mail erfolgreich gesendet!";
} else {
    echo "E-Mail konnte nicht gesendet werden.";
}
?>

Zuerst wollen wir den Namen validieren. In unserem Fall wollen wir nur Buchstaben und Leerzeichen im Namen zulassen. Wir können das mit einem regulären Ausdruck erreichen, der diese Zeichen zulässt und alle anderen ablehnt:

$name = $_POST['name'];
if (!preg_match("/^[a-zA-Z ]*$/", $name)) {
  echo "Nur Buchstaben und Leerzeichen sind erlaubt im Namen.";
  exit();
}

Als nächstes wollen wir die E-Mail-Adresse validieren. PHP bietet eine eingebaute Funktion namens filter_var(), die wir mit der Option FILTER_VALIDATE_EMAIL verwenden können, um zu überprüfen, ob die Eingabe eine gültige E-Mail-Adresse ist:

$email = $_POST['email'];
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
  echo "Ungültige E-Mail-Adresse.";
  exit();
}

Schließlich wollen wir die Nachricht validieren. In unserem Fall wollen wir sicherstellen, dass die Nachricht nicht leer ist. Dafür können wir die Funktion empty() verwenden:

$message = $_POST['message'];
if (empty($message)) {
  echo "Bitte eine Nachricht eingeben.";
  exit();
}

Nach der Validierung können wir den Rest unseres Codes ausführen, sicher in dem Wissen, dass unsere Eingaben unseren Erwartungen entsprechen. Hier ist der vollständige PHP-Code mit der Validierung:

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message =

 $_POST['message'];

// Validiere den Namen
if (!preg_match("/^[a-zA-Z ]*$/", $name)) {
  echo "Nur Buchstaben und Leerzeichen sind erlaubt im Namen.";
  exit();
}

// Validiere die E-Mail-Adresse
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
  echo "Ungültige E-Mail-Adresse.";
  exit();
}

// Validiere die Nachricht
if (empty($message)) {
  echo "Bitte eine Nachricht eingeben.";
  exit();
}

$headers = 'From: ' . $email;
$to = 'deine-email@beispiel.de';
$subject = 'Neue Nachricht von ' . $name;

if (mail($to, $subject, $message, $headers)) {
    echo "E-Mail erfolgreich gesendet!";
} else {
    echo "E-Mail konnte nicht gesendet werden.";
}
?>

Dieser Code validiert nun die Benutzereingaben, bevor er sie verwendet, was hilft, die Anwendung sicherer zu machen. Bitte beachte, dass dies ein einfacher Ansatz zur Validierung ist und dass es noch viele andere Aspekte gibt, die berücksichtigt werden sollten, wie die Bereinigung der Eingaben, die Überprüfung auf Cross-Site-Scripting (XSS) oder SQL-Injection-Angriffe, je nachdem, wie die Eingaben verwendet werden. Es ist immer eine gute Idee, sich eingehend mit der Sicherheit von Webanwendungen zu befassen und bei Bedarf Expertenrat einzuholen.

Cross-Site-Scripting (XSS)

Cross-Site-Scripting, oft einfach als XSS bezeichnet, ist eine Art von Angriff, bei dem schädlicher Code in Webseiten injiziert wird, die von anderen Benutzern betrachtet werden. Diese Angriffe nutzen die Tatsache aus, dass Webbrowser Code ausführen, der in Webseiten eingebettet ist.

Es gibt im Wesentlichen drei Arten von XSS-Angriffen:

  1. Gespeicherte XSS: Diese Art von Angriff tritt auf, wenn schädlicher Code dauerhaft auf der Zielwebsite gespeichert wird. Dies geschieht in der Regel, wenn die Website Benutzereingaben erlaubt, die ohne ausreichende Validierung und Bereinigung gespeichert werden.
  2. Reflektierte XSS: Diese Art von Angriff tritt auf, wenn schädlicher Code in eine URL eingebettet ist, die zur Angriffswebsite führt. Wenn ein Benutzer auf die manipulierte URL klickt, wird der schädliche Code in die Webseite eingebettet und von ihrem Browser ausgeführt.
  3. DOM-basierte XSS: Diese Art von Angriff tritt auf, wenn schädlicher Code aufgrund unsicherer JavaScript-Praktiken in die Webseite injiziert wird.

SQL-Injection

Eine SQL-Injection ist eine Art von Angriff, bei dem schädliche SQL-Anweisungen in eine Anfrage eingefügt werden, die an eine Datenbank gesendet wird. Dies geschieht in der Regel durch Manipulation von Formulardaten oder URL-Parametern, die in SQL-Abfragen eingefügt werden.

Ein erfolgreicher SQL-Injection-Angriff kann es dem Angreifer ermöglichen, Daten aus der Datenbank zu lesen, zu ändern oder zu löschen, oder in einigen Fällen sogar administrative Kontrolle über das gesamte System zu erlangen.

Beide Arten von Angriffen können durch korrekte Validierung und Bereinigung aller Benutzereingaben und durch Verwendung sicherer Praktiken bei der Entwicklung von Webanwendungen verhindert werden. Für SQL-Abfragen bedeutet dies in der Regel die Verwendung von parametrisierten Abfragen oder vorbereiteten Anweisungen, anstatt Benutzereingaben direkt in SQL-Abfragen einzufügen. Bei der Arbeit mit HTML- und JavaScript-Code bedeutet dies die ordnungsgemäße Kodierung von Benutzereingaben, um zu verhindern, dass sie als Code interpretiert werden.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen