PHP -Tutorial

PHP-HOME PHP-Einführung PHP-Installation PHP-Syntax PHP-Kommentare PHP-Variablen PHP-Echo / Drucken PHP-Datentypen PHP-Strings PHP-Nummern PHP-Mathematik PHP-Konstanten PHP-Operatoren PHP If...Else...Elseif PHP-Schalter PHP-Schleifen PHP-Funktionen PHP-Arrays PHP-Superglobals PHP-RegEx

PHP -Formulare

Handhabung von PHP-Formularen PHP-Formularvalidierung PHP-Formular erforderlich PHP-Formular-URL/E-Mail PHP-Formular vollständig

PHP- Erweitert

PHP-Datum und -Zeit PHP einschließen Umgang mit PHP-Dateien PHP-Datei öffnen/lesen PHP-Datei erstellen/schreiben Hochladen von PHP-Dateien PHP-Cookies PHP-Sitzungen PHP-Filter PHP-Filter für Fortgeschrittene PHP-Callback-Funktionen PHP-JSON PHP-Ausnahmen

PHP -OOP

PHP Was ist OOP PHP-Klassen/Objekte PHP-Konstruktor PHP-Destruktor PHP-Zugriffsmodifikatoren PHP-Vererbung PHP-Konstanten Abstrakte PHP-Klassen PHP-Schnittstellen PHP-Eigenschaften Statische PHP-Methoden Statische PHP-Eigenschaften PHP-Namespaces PHP-Iterables

MySQL- Datenbank

MySQL-Datenbank MySQL Connect MySQL-DB erstellen MySQL-Tabelle erstellen MySQL-Daten einfügen MySQL Letzte ID abrufen MySQL Mehrfach einfügen MySQL vorbereitet MySQL Select-Daten MySQL-Wo MySQL-Reihenfolge nach MySQL-Daten löschen MySQL-Update-Daten MySQL-Limit-Daten

PHP- XML

PHP-XML-Parser PHP-SimpleXML-Parser PHP SimpleXML - Get PHP-XML-Expat PHP-XML-DOM

PHP -AJAX

AJAX-Einführung AJAX-PHP AJAX-Datenbank AJAX-XML AJAX Live-Suche AJAX-Umfrage

PHP- Beispiele

PHP-Beispiele PHP-Compiler PHP-Quiz PHP-Übungen PHP-Zertifikat

PHP- Referenz

PHP-Übersicht PHP-Array PHP-Kalender PHP-Datum PHP-Verzeichnis PHP-Fehler PHP-Ausnahme PHP-Dateisystem PHP-Filter PHP-FTP PHP-JSON PHP-Schlüsselwörter PHP-Libxml PHP-Mail PHP-Mathematik PHP-Sonstiges PHP MySQLi PHP-Netzwerk PHP-Ausgabesteuerung PHP-RegEx PHP-SimpleXML PHP-Stream PHP-String Umgang mit PHP-Variablen PHP-XML-Parser PHP-Zip PHP-Zeitzonen

PHP -Formularvalidierung


Dieses und die nächsten Kapitel zeigen, wie Sie PHP verwenden, um Formulardaten zu validieren.


PHP-Formularvalidierung

Denken Sie bei der Verarbeitung von PHP-Formularen an SICHERHEIT!

Diese Seiten zeigen, wie Sie PHP-Formulare mit Blick auf die Sicherheit verarbeiten. Die ordnungsgemäße Validierung von Formulardaten ist wichtig, um Ihr Formular vor Hackern und Spammern zu schützen!

Das HTML-Formular, an dem wir in diesen Kapiteln arbeiten werden, enthält verschiedene Eingabefelder: erforderliche und optionale Textfelder, Optionsfelder und eine Schaltfläche zum Senden:

Die Validierungsregeln für das obige Formular lauten wie folgt:

Field Validation Rules
Name Required. + Must only contain letters and whitespace
E-mail Required. + Must contain a valid email address (with @ and .)
Website Optional. If present, it must contain a valid URL
Comment Optional. Multi-line input field (textarea)
Gender Required. Must select one

Zuerst sehen wir uns den reinen HTML-Code für das Formular an:



Textfelder

Die Felder Name, E-Mail und Website sind Texteingabeelemente, und das Kommentarfeld ist ein Textbereich. Der HTML-Code sieht so aus:

Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

Radio Knöpfe

Die Geschlechtsfelder sind Optionsfelder und der HTML-Code sieht folgendermaßen aus:

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other

Das Form-Element

Der HTML-Code des Formulars sieht folgendermaßen aus:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Beim Absenden des Formulars werden die Formulardaten mit method="post" gesendet.

Was ist die $_SERVER["PHP_SELF"]-Variable?

$_SERVER["PHP_SELF"] ist eine superglobale Variable, die den Dateinamen des aktuell ausgeführten Skripts zurückgibt.

Der $_SERVER["PHP_SELF"] sendet also die gesendeten Formulardaten an die Seite selbst, anstatt zu einer anderen Seite zu springen. Auf diese Weise erhält der Benutzer Fehlermeldungen auf derselben Seite wie das Formular.

Was ist die Funktion htmlspecialchars()?

Die Funktion htmlspecialchars() wandelt Sonderzeichen in HTML-Entitäten um. Das bedeutet, dass HTML-Zeichen wie < und > durch < und >. Dadurch wird verhindert, dass Angreifer den Code ausnutzen, indem sie HTML- oder Javascript-Code (Cross-Site-Scripting-Angriffe) in Formulare einschleusen.


Großer Hinweis zur Sicherheit von PHP-Formularen

Die Variable $_SERVER["PHP_SELF"] kann von Hackern verwendet werden!

Wenn PHP_SELF auf Ihrer Seite verwendet wird, kann ein Benutzer einen Schrägstrich (/) und dann einige auszuführende Cross Site Scripting (XSS)-Befehle eingeben.

Cross-Site-Scripting (XSS) ist eine Art von Computer-Sicherheitslücke, die typischerweise in Webanwendungen zu finden ist. XSS ermöglicht es Angreifern, clientseitige Skripts in Webseiten einzuschleusen, die von anderen Benutzern angezeigt werden.

Angenommen, wir haben das folgende Formular auf einer Seite namens "test_form.php":

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

Wenn ein Benutzer nun die normale URL in die Adressleiste wie "http://www.example.com/test_form.php" eingibt, wird der obige Code übersetzt in:

<form method="post" action="test_form.php">

So weit, ist es gut.

Bedenken Sie jedoch, dass ein Benutzer die folgende URL in die Adressleiste eingibt:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

In diesem Fall wird der obige Code übersetzt in:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

Dieser Code fügt ein script-Tag und einen Alert-Befehl hinzu. Und wenn die Seite geladen wird, wird der JavaScript-Code ausgeführt (der Benutzer sieht ein Warnfeld). Dies ist nur ein einfaches und harmloses Beispiel, wie die Variable PHP_SELF ausgenutzt werden kann.

Beachten Sie, dass innerhalb des <script>-Tags beliebiger JavaScript-Code hinzugefügt werden kann! Ein Hacker kann den Benutzer zu einer Datei auf einem anderen Server umleiten, und diese Datei kann schädlichen Code enthalten, der beispielsweise die globalen Variablen ändern oder das Formular an eine andere Adresse senden kann, um die Benutzerdaten zu speichern.


Wie kann man $_SERVER["PHP_SELF"]-Exploits vermeiden?

$_SERVER["PHP_SELF"]-Exploits können durch die Verwendung der Funktion htmlspecialchars() vermieden werden.

Der Formularcode sollte wie folgt aussehen:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Die Funktion htmlspecialchars() wandelt Sonderzeichen in HTML-Entitäten um. Wenn der Benutzer nun versucht, die PHP_SELF-Variable auszunutzen, führt dies zu folgender Ausgabe:

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

Der Exploit-Versuch schlägt fehl, und es entsteht kein Schaden!


Validieren Sie Formulardaten mit PHP

Das erste, was wir tun werden, ist, alle Variablen durch die Funktion htmlspecialchars() von PHP zu übergeben.

Wenn wir die Funktion htmlspecialchars() verwenden; dann, wenn ein Benutzer versucht, Folgendes in ein Textfeld einzureichen:

<script>location.href('http://www.gehackt.com')</script>

- Dies würde nicht ausgeführt, da es als HTML-Escape-Code gespeichert würde, wie folgt:

<script>location.href('http://www.hacked.com')</script>

Der Code kann jetzt sicher auf einer Seite oder in einer E-Mail angezeigt werden.

Wir werden auch zwei weitere Dinge tun, wenn der Benutzer das Formular absendet:

  1. Entfernen Sie unnötige Zeichen (zusätzliches Leerzeichen, Tabulator, Zeilenumbruch) aus den Benutzereingabedaten (mit der PHP-Funktion trim())
  2. Entfernen Sie Backslashes (\) aus den Benutzereingabedaten (mit der PHP-Funktion stripeslashes())

Der nächste Schritt besteht darin, eine Funktion zu erstellen, die die gesamte Überprüfung für uns übernimmt (was viel bequemer ist, als denselben Code immer wieder zu schreiben).

Wir nennen die Funktion test_input().

Jetzt können wir jede $_POST-Variable mit der Funktion test_input() überprüfen, und das Skript sieht so aus:

Beispiel

<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

Beachten Sie, dass wir beim Start des Skripts prüfen, ob das Formular mit $_SERVER["REQUEST_METHOD"] gesendet wurde. Wenn die REQUEST_METHOD POST ist, wurde das Formular gesendet – und es sollte validiert werden. Wenn es nicht übermittelt wurde, überspringen Sie die Validierung und zeigen Sie ein leeres Formular an.

Im obigen Beispiel sind jedoch alle Eingabefelder optional. Das Skript funktioniert auch dann einwandfrei, wenn der Benutzer keine Daten eingibt.

Der nächste Schritt besteht darin, Eingabefelder zu Pflichtfeldern zu machen und bei Bedarf Fehlermeldungen zu erstellen.