Diese und die folgenden Kapitel zeigen, wie PHP zu verwenden, Formulardaten zu validieren.
PHP Form Validation
Denken Sie Sicherheit , wenn PHP Formularverarbeitung!
Diese Seiten werden zeigen, wie PHP-Formulare mit Sicherheit im Auge zu verarbeiten. Die richtige Validierung von Formulardaten ist wichtig, um Ihre Form vor Hackern und Spammern zu schützen!
Das HTML-Formular werden wir in diesen Kapiteln zu arbeiten, enthält verschiedene Eingabefelder: erforderliche und optionale Textfelder, Optionsfelder und eine Submit-Button:
Die Validierungsregeln für die Form sind oben wie folgt:
Feld | Validierungsregeln |
---|---|
Name | Erforderlich. + Müssen nur Buchstaben und Leerzeichen |
Erforderlich. + Es muss eine gültige E - Mail - Adresse enthält (with @ and .) | |
Webseite | Optional. Falls vorhanden, muss es eine gültige URL enthalten |
Kommentar | Optional. Multi-line - Eingabefeld (textarea) |
Geschlecht | Erforderlich. Muss man wählen |
Zuerst werden wir auf der Ebene HTML-Code für das Formular aussehen:
Textfelder
Der Name, E-Mail und Website-Felder sind Texteingabeelemente und das Kommentarfeld ist ein Textfeld. Der HTML-Code sieht wie folgt 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 geschlechtsspezifische Felder sind Radio-Buttons und der HTML-Code sieht wie folgt aus:
Gender:
<input type="radio" name="gender"
value="female">Female
<input type="radio" name="gender" value="male">Male
Das Formelement
Der HTML-Code des Formulars sieht wie folgt aus:
<form method="post" action="<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Wenn das Formular abgeschickt wird, wird die Formulardaten mit method = „post“ gesendet.
Was ist der $ _SERVER [ "PHP_SELF"] Variable?
Die $ _SERVER [ „PHP_SELF“] ist ein super globale Variable, die den Dateinamen des aktuell ausgeführten Skripts zurückgibt.
Also, der $ _SERVER [ „PHP_SELF“] sendet die übermittelten Formulardaten an der Seite selbst, sondern auf eine andere Seite zu springen. Auf diese Weise wird der Benutzer Fehlermeldungen auf der gleichen Seite wie die Form bekommen.
Was ist die htmlspecialchars() Funktion?
Die htmlspecialchars() Funktion konvertiert Sonderzeichen in HTML - Entitäten. Das bedeutet, dass es HTML-Zeichen ersetzen wird wie <und> mit & lt; und & gt ;. Dies verhindert , dass Angreifer den Code ausnutzen von HTML Injektion oder Javascript - Code (Cross-site Scripting attacks) - (Cross-site Scripting attacks) - (Cross-site Scripting attacks) in Formularen.
Big Hinweis auf PHP Formular Sicherheits
Der $ _SERVER [ "PHP_SELF"] Variable kann von Hackern verwendet werden!
Wenn PHP_SELF auf Ihrer Seite verwendet wird , dann kann ein Benutzer einen Schrägstrich (/) und dann einig Cross - Site - Scripting (XSS) Befehle auszuführen.
Cross-Site - Scripting (XSS) ist eine Art von Computer - Sicherheitslücke , die typischerweise in Web - Anwendungen gefunden. XSS ermöglicht Angreifern clientseitige Skript in Webseiten , die von anderen Benutzern angezeigt zu injizieren.
Angenommen , wir das folgende Formular in einer Seite mit dem Namen haben "test_form.php" :
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Nun, wenn ein Benutzer die normale URL in der Adressleiste wie betritt "http://www.example.com/test_form.php" , wird der obige Code zu übersetzen:
<form method="post" action="test_form.php">
So weit, ist es gut.
Beachten Sie jedoch, dass ein Benutzer die folgende URL in der 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:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
Dieser Code fügt einen Skript-Tag und einen Alarmbefehl. Und wenn die Seite geladen wird , die JavaScript - Code wird ausgeführt (the user will see an alert box) . Dies ist nur ein einfaches und harmloses Beispiel, wie die PHP_SELF variabel genutzt werden kann.
Sich bewusst sein , dass jeder JavaScript - Code kann innerhalb der hinzugefügt werden <script> Tag! Ein Hacker kann den Benutzer in eine Datei auf einen anderen Server umgeleitet, und die Datei kann bösartigen Code enthalten, die die globalen Variablen oder senden Sie das Formular an eine andere Adresse verändern können die Benutzerdaten, zum Beispiel zu speichern.
How To $ _SERVER [ "PHP_SELF"] Exploits vermeiden?
$ _SERVER [ "PHP_SELF"] Exploits können mit der vermieden werden htmlspecialchars() Funktion.
Die Form Code soll wie folgt aussehen:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Die htmlspecialchars() Funktion konvertiert Sonderzeichen in HTML - Entitäten. Nun, wenn der Benutzer der PHP_SELF Variable zu nutzen versucht, wird es in der folgenden Ausgabe:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
Der Exploit Versuch fehlschlägt, und kein Schaden ist fertig!
Bestätigen Sie Formulardaten mit PHP
Das erste , was wir tun, ist , alle Variablen über die PHP passieren htmlspecialchars() Funktion.
Wenn wir verwenden , um die htmlspecialchars() Funktion; dann, wenn ein Benutzer versucht, die folgend in einem Textfeld zu übermitteln:
<Script> Lage. href('http://www.hacked.com') </ script>
- das wäre nicht ausgeführt werden, weil sie gerettet werden als HTML-Code entkommen, wie folgt aus:
& Lt; script & gt; Lage. href('http://www.hacked.com') & lt; / script & gt;
Der Code ist jetzt sicher auf einer Seite oder in einer E-Mail angezeigt werden.
Wir werden auch noch zwei weitere Dinge tun, wenn der Benutzer das Formular abschickt:
- Streifen unnötige Zeichen (extra space, tab, newline) - (with the PHP trim() (extra space, tab, newline) von den Benutzereingabedatum (with the PHP trim() Funktion)
- Entfernen Backslash (\) von den Benutzereingabedatum (with the PHP stripslashes() Funktion)
Der nächste Schritt ist es, eine Funktion zu erstellen , die für uns alle die Prüfung tun (which is much more convenient than writing the same code over and over again) , (which is much more convenient than writing the same code over and over again) das (which is much more convenient than writing the same code over and over again) .
Wir werden den Namen der Funktion test_input() .
Jetzt können wir jede $ _POST Variable mit dem überprüfen test_input() Funktion, und das Skript sieht wie folgt 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;
}
?>
Führen Sie zB » Beachten Sie, dass zu Beginn des Skripts, prüfen wir, ob das Formular _SERVER $ mit eingereicht wurde [ „REQUEST_METHOD“]. Wenn die REQUEST_METHOD POST ist, dann hat das Formular abgeschickt worden - und es soll überprüft werden. Wenn er noch nicht abgegeben hat, lassen Sie die Validierung und ein leeres Formular angezeigt werden soll.
Jedoch in dem obigen Beispiel werden alle Eingabefelder sind optional. Das Skript funktioniert auch gut, wenn der Benutzer eingeben keine Daten.
Der nächste Schritt ist, um Eingabefelder erforderlich machen und Fehlermeldungen erstellen, wenn nötig.