PHP-Formularvalidierung
- Vorherige Seite PHP Formularverarbeitung
- Nächste Seite PHP Pflichtfelder im Formular
本节和下一节讲解如何使用 PHP 来验证表单数据。
PHP-Formularvalidierung
Tipp:Beeinhalten Sie bei der Verarbeitung von PHP-Formularen die Sicherheit!
Diese Seiten zeigen, wie PHP-Formulare sicher bearbeitet werden. Eine angemessene Überprüfung der HTML-Formulardaten ist wichtig, um Hacker und Spam zu verhindern!
Die von uns später verwendeten HTML-Formulare enthalten verschiedene Eingabefelder: Erforderliche und optionale Textfelder, Auswahlknöpfe sowie den Abschicken-Knopf:
Das obige Formular verwendet folgende Überprüfungsvorschriften:
Feld | Überprüfungsvorschriften |
---|---|
Name | Erforderlich. Muss Buchstaben und Leerzeichen enthalten. |
Erforderlich. Muss eine gültige E-Mail-Adresse enthalten (inklusive @ und .). | |
Website | Optional. Wenn ausgefüllt, muss eine gültige URL enthalten. |
Kommentar | Optional. Mehrzeiliges Eingabefeld (Textfeld). |
Geschlecht | Erforderlich. Eine Auswahl muss getroffen werden. |
Zunächst schauen wir uns den reinen HTML-Code dieses Formulars an:
Textfelder
Die Felder name, email und website sind Texteingabefelder, das Kommentar-Feld ist ein Textfeld. Der HTML-Code ist wie folgt:
Name: <input type="text" name="name"> E-Mail: <input type="text" name="email"> Website: <input type="text" name="website"> Kommentar: <textarea name="comment" rows="5" cols="40"></textarea>
Auswahlknöpfe
Das Geschlecht ist ein Auswahlknopf, der HTML-Code ist wie folgt:
Geschlecht: <input type="radio" name="gender" value="female">Female <input type="radio" name="gender" value="male">Male
Formularelemente
Der HTML-Code des Formulars ist wie folgt:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
Bei der Übermittlung dieses Formulars werden die Formulardaten über method="post" gesendet.
Was ist die Variable $_SERVER["PHP_SELF"]?
$_SERVER["PHP_SELF"] ist eine Super globale Variable, die den Dateinamen der aktuellen ausführbaren Skriptdatei zurückgibt.
Daher sendet $_SERVER["PHP_SELF"] die Formulardaten an die selbe Seite, anstatt zu einer anderen Seite zu springen. Auf diese Weise können die Benutzer Fehlerhinweise auf der Formularseite erhalten.
Was ist die Funktion htmlspecialchars()?
Die Funktion htmlspecialchars() wandelt spezielle Zeichen in HTML-Entitäten um. Dies bedeutet, dass HTML-Zeichen wie < und > durch < und > ersetzt werden. Dies verhindert, dass Angreifer durch das Einfügen von HTML oder JavaScript-Code (Cross-Site Scripting-Angriff) in das Formular den Code ausnutzen.
Wichtige Hinweise zur Sicherheit von PHP-Formularen
Die Variable $_SERVER["PHP_SELF"] kann von Hackern ausgenutzt werden!
Wenn Ihre Seite PHP_SELF verwendet, können Benutzer einen Unterstrich eingeben und Cross-Site Scripting (XSS) ausführen.
Tipp:Cross-Site Scripting (XSS) ist ein Typ von Computersicherheitslücke, die häufig in Web-Anwendungen vorkommt. XSS ermöglicht es Angreifern, Client-Skripte in von anderen Benutzern angezeigte Webseiten einzufügen.
Angenommen, auf einer Seite namens "test_form.php" befindet sich folgender Formular:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Jetzt, wenn der Benutzer die normale URL in der Adresszeile aufruft: "http://www.example.com/test_form.php", wird der obige Code in folgendes umgewandelt:
<form method="post" action="test_form.php">
Bis jetzt ist alles in Ordnung.
Allerdings, wenn der Benutzer die folgende URL in die Adresszeile eingibt:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
In diesem Fall wird der obige Code in folgendes umgewandelt:
<form method="post" action="test_form.php"/><script>alert('hacked')</script>
Dieser Code fügt einen Skript-Code und einen Befehl zur Anzeige eines Hinweises hinzu. Und wenn diese Seite geladen wird, wird der JavaScript-Code ausgeführt (der Benutzer sieht ein Hinweisfenster). Dies ist ein einfaches und harmloses Beispiel darüber, wie die PHP_SELF-Variablen genutzt werden können.
Sie sollten sich bewusst sein Der <script>-Tag kann jeden JavaScript-Code hinzufügen!Hackers can redirect users to a file on another server, where malicious code can change global variables or submit forms to other addresses to save user data, etc.
How to avoid the exploitation of $_SERVER["PHP_SELF"]?
By using the htmlspecialchars() function, we can avoid the exploitation of $_SERVER["PHP_SELF"].
The form code is like this:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
The htmlspecialchars() function converts special characters to HTML entities. Now, if the user tries to exploit the PHP_SELF variable, it will cause the following output:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
Not exploitable, no harm!
PHP form data validation
The first thing we need to do is pass all variables through PHP's htmlspecialchars() function.
After we use the htmlspecialchars() function, if the user tries to submit the following content in a text field:
<script>location.href('http://www.hacked.com')</script>
- The code will not be executed because it will be saved as escaped code, like this:
<script>location.href('http://www.hacked.com')</script>
Now this code is safe to display on the page or in an email.
When the user submits the form, we also need to do two things:
- (By using PHP's trim() function) remove unnecessary characters from the user's input data (extra spaces, tabs, new lines)
- (By using PHP's stripslashes() function) remove backslashes (\) from the user's input data
Next, we create a check function (this is more efficient than writing code repeatedly).
We name the function test_input().
Now, we can check each $_POST variable through the test_input() function, the script is like this:
Example
<?php // Definition of variables and setting them 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; } ?>
Bitte beachten Sie, dass wir am Anfang des Skripts überprüfen, ob das Formular mit $_SERVER["REQUEST_METHOD"] eingereicht wurde. Wenn REQUEST_METHOD POST ist, wurde das Formular eingereicht - und sollte überprüft werden. Wenn nicht eingereicht, wird die Überprüfung übersprungen und ein leeres Formular angezeigt.
Allerdings sind alle Eingabefelder im obigen Beispiel optional. Selbst wenn der Benutzer keine Daten eingibt, funktioniert das Skript normal.
Der nächste Schritt ist die Erstellung von Pflichtfeldern für die Eingabe und die Erstellung der erforderlichen Fehlermeldungen.
- Vorherige Seite PHP Formularverarbeitung
- Nächste Seite PHP Pflichtfelder im Formular