PHP Formularvalidierung
In diesem Kapitel wird gezeigt, wie man mit PHP vom Client übermittelte Formulardaten validiert.
PHP-Formularvalidierung
![]() |
Beim Verarbeiten von PHP-Formularen müssen wir die Sicherheit berücksichtigen.
In diesem Kapitel demonstrieren wir den sicheren Umgang mit PHP-Formulardaten. Um Hacker und Spam zu verhindern, müssen wir eine Sicherheitsvalidierung des Formulars durchführen. |
|---|
Das in diesem Kapitel vorgestellte HTML-Formular enthält die folgenden Eingabefelder: erforderliche und optionale Textfelder, Radiobuttons und eine Schaltfläche zum Absenden:
Die Validierungsregeln für das obige Formular lauten wie folgt:
| Feld | Validierungsregeln |
|---|---|
| Name | Erforderlich. + Darf nur Buchstaben und Leerzeichen enthalten |
| Erforderlich. + Muss eine gültige E-Mail-Adresse sein (enthält '@' und '.') | |
| URL | Optional. Falls vorhanden, muss es eine gültige URL enthalten |
| Hinweise | Optional. Mehrzeiliges Eingabefeld (Textarea) |
| Geschlecht | Erforderlich. Es muss eine Auswahl getroffen werden. |
Zuerst sehen wir uns den reinen HTML-Formularcode an:
Textfelder
Die Felder "Name", "E-mail" und "URL" sind Texteingabeelemente, und das Feld "Remarks" ist eine Textarea. Der HTML-Code lautet wie folgt:
“名字”: <input type="text" name="name"> E-mail: <input type="text" name="email"> 网址: <input type="text" name="website"> 备注: <textarea name="comment" rows="5" cols="40"></textarea>
Optionsfelder
Das Feld "Gender" besteht aus Radiobuttons. Der HTML-Code lautet wie folgt:
性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男
Formularelemente
Der HTML-Formularcode lautet wie folgt:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Dieses Formular verwendetmethod="post"Methode zum Übermitteln von Daten.
![]() |
Was ist die Variable $_SERVER["PHP_SELF"]? $_SERVER["PHP_SELF"] ist eine superglobale Variable, die den Dateinamen des aktuell ausgeführten Skripts relativ zur Dokumentwurzel zurückgibt. |
|---|
Also sendet $_SERVER["PHP_SELF"] Formulardaten an die aktuelle Seite, anstatt zu einer anderen Seite zu springen.
![]() |
Was ist die Methode htmlspecialchars()? Die Funktion htmlspecialchars() wandelt einige vordefinierte Zeichen in HTML-Entitäten um. Die vordefinierten Zeichen sind:
|
|---|
Worauf muss man bei PHP-Formularen achten?
Die Variable $_SERVER["PHP_SELF"] kann potenziell von Hackern ausgenutzt werden!
Wenn Hacker Cross-Site-Scripting-HTTP-Links für Angriffe verwenden, kann auch die Servervariable $_SERVER["PHP_SELF"] mit Skripten injiziert werden. Der Grund dafür ist, dass das Cross-Site-Skript an den Pfad der ausgeführten Datei angehängt wird, sodass die Zeichenkette $_SERVER["PHP_SELF"] JavaScript-Code enthält, der auf den HTTP-Link folgt.
![]() |
XSS wird auch als CSS (Cross-Site Script) bezeichnet, ein Cross-Site-Scripting-Angriff. Bösartige Angreifer fügen bösartigen HTML-Code in Webseiten ein. Wenn Benutzer die Seite aufrufen, wird der in der Webseite eingebettete HTML-Code ausgeführt, wodurch der spezielle Zweck des bösartigen Benutzers erreicht wird. |
|---|
Geben Sie den folgenden Formulardateinamen als "test_form.php" an:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Nun verwenden wir die URL, um die Übermittlungsadresse "test_form.php" anzugeben. Der obige Code wird wie folgt geändert:
<form method="post" action="test_form.php">
Das wäre in Ordnung.
Beachten Sie jedoch, dass Benutzer die folgende Adresse in die Adressleiste des Browsers eingeben könnten:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
In der obigen URL wird es als der folgende Code geparst und ausgeführt:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
Der Code fügt ein Script-Tag und einen alert-Befehl hinzu. Wenn die Seite geladen wird, wird dieser JavaScript-Code ausgeführt (der Benutzer sieht ein Pop-up-Fenster). Dies ist nur ein einfaches Beispiel, um zu veranschaulichen, dass die Variable PHP_SELF von Hackern ausgenutzt werden kann.
Bitte beachten Sie,Beliebiger JavaScript-Code kann in das <script>-Tag eingefügt werden!Hacker können dies verwenden, um die Seite auf eine Seite auf einem anderen Server umzuleiten. Die Seitencode-Datei kann bösartigen Code enthalten, und der Code kann globale Variablen ändern oder die Formulardaten des Benutzers abrufen.
Wie vermeidet man, dass $_SERVER["PHP_SELF"] ausgenutzt wird?
Die Variable $_SERVER["PHP_SELF"] kann mit der Funktion htmlspecialchars() vor Ausnutzung geschützt werden.
Der Formularcode sieht wie folgt aus:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars() wandelt einige vordefinierte Zeichen in HTML-Entitäten um. Wenn Benutzer nun die Variable PHP_SELF ausnutzen wollen, wird das Ergebnis wie folgt ausgegeben:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
Der Versuch, die Sicherheitslücke auszunutzen, schlägt fehl!
Verwendung von PHP zur Validierung von Formulardaten
Zuerst verarbeiten wir alle vom Benutzer übermittelten Daten durch die htmlspecialchars()-Funktion von PHP.
Wenn wir die Funktion htmlspecialchars() verwenden und der Benutzer versucht, das folgende Textfeld zu übermitteln:
<script>location.href('http://www.example.com')</script>
Der Code wird nicht ausgeführt, da er als HTML-escaped Code gespeichert wird, wie folgt:
<script>location.href('http://www.example.com')</script>
Der obige Code ist sicher und kann normal auf der Seite angezeigt oder in E-Mails eingefügt werden.
Wenn der Benutzer das Formular absendet, führen wir die folgenden zwei Dinge aus:
- Verwenden Sie die PHP-Funktion trim(), um unnötige Zeichen aus den Benutzereingabedaten zu entfernen (z. B. Leerzeichen, Tabulatoren, Zeilenumbrüche).
- Verwenden Sie die PHP-Funktion stripslashes(), um Backslashes (\) aus den Benutzereingabedaten zu entfernen.
Als Nächstes schreiben wir diese Filterfunktionen in eine eigene Funktion, was die Wiederverwendbarkeit des Codes erheblich verbessern kann.
Nennen Sie die Funktion test_input().
Jetzt können wir die Funktion test_input() verwenden, um alle Variablen in $_POST zu überprüfen. Der Skriptcode lautet wie folgt:
Beispiel
Beispiel ausführen »
Beachten Sie, dass wir beim Ausführen des oben genannten Skripts $_SERVER["REQUEST_METHOD"] verwenden, um festzustellen, ob das Formular übermittelt wurde. Wenn REQUEST_METHOD POST ist, wird das Formular übermittelt – und die Daten werden validiert. Wenn das Formular nicht übermittelt wurde, wird die Validierung übersprungen und es werden leere Felder angezeigt.
Im obigen Beispiel sind alle Eingabefelder optional. Selbst wenn Benutzer keine Daten eingeben, wird es normal angezeigt.
In den folgenden Kapiteln werden wir vorstellen, wie die von Benutzern eingegebenen Daten validiert werden.
Andere Erweiterungen