Heim  >  Artikel  >  Backend-Entwicklung  >  Wie schreibe ich eine sichere Formularvalidierung mit PHP?

Wie schreibe ich eine sichere Formularvalidierung mit PHP?

WBOY
WBOYOriginal
2023-08-26 20:04:531403Durchsuche

Wie schreibe ich eine sichere Formularvalidierung mit PHP?

Wie schreibe ich eine sichere Formularvalidierung mit PHP?

Bei der Entwicklung von Webanwendungen sind Formulare einer der wesentlichen Bestandteile. Über Formulare können wir mit Benutzern interagieren und von Benutzern eingegebene Daten abrufen. Allerdings sind die von Benutzern eingegebenen Daten oft nicht vertrauenswürdig und können bösartigen Code und böswilliges Verhalten enthalten. Daher müssen Benutzereingabedaten vor der Verarbeitung validiert und gefiltert werden, um die Sicherheit der Anwendung zu gewährleisten. In diesem Artikel erfahren Sie, wie Sie eine sichere Formularvalidierung mit PHP schreiben.

  1. PHP-Filter aktivieren

PHP bietet einige integrierte Filter, die zum Validieren und Filtern von Benutzereingabedaten verwendet werden können. Zuerst müssen wir sicherstellen, dass die Filterfunktion von PHP aktiviert ist. Suchen Sie die folgenden Codezeilen in der Datei php.ini und stellen Sie sicher, dass sie nicht auskommentiert sind:

;extension=filter
;extension=filter_xss

Entfernen Sie das vorangehende Semikolon, speichern Sie die Datei und starten Sie dann den Webserver neu.

  1. Formular einrichten

Zuerst müssen wir das Formular einrichten und die Formularbeschriftungen und entsprechenden Eingabefelder definieren. Erstellen Sie beispielsweise ein Registrierungsformular mit den Feldern Benutzername, Passwort und E-Mail-Adresse:

<form action="register.php" method="post">
    <label for="username">用户名:</label>
    <input type="text" name="username" id="username">

    <label for="password">密码:</label>
    <input type="password" name="password" id="password">

    <label for="email">邮箱:</label>
    <input type="email" name="email" id="email">

    <input type="submit" value="注册">
</form>
  1. Validierungscode schreiben

Nach dem Absenden des Formulars müssen wir einen Validierungscode schreiben, um die Benutzereingabedaten zu validieren und zu filtern. Erstens können wir die Filterfunktionen filter_input() und filter_input_array() verwenden, um Benutzereingabedaten abzurufen und zu filtern. filter_input()filter_input_array()来获取并过滤用户输入数据。

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
$password = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);

在上述代码中,filter_input()函数用于过滤单个输入字段,filter_input_array()函数用于过滤多个输入字段。FILTER_SANITIZE_STRING用于过滤字符串,FILTER_SANITIZE_EMAIL用于过滤电子邮件地址。

接下来,我们可以使用正则表达式对用户名和密码进行额外的验证。例如,验证用户名只包含字母、数字和下划线,并且长度在3到20个字符之间:

$usernameRegex = '/^[a-zA-Z0-9_]{3,20}$/';
if (!preg_match($usernameRegex, $username)) {
    echo "用户名必须是3到20个字符的字母、数字或下划线组合";
    exit();
}

类似地,我们可以对其他需要进一步验证的字段进行正则表达式验证。

最后,确保在将用户输入数据存储到数据库之前,使用适当的转义函数对数据进行转义,以防止SQL注入攻击。例如,使用mysqli_real_escape_string()函数对数据进行转义:

$username = mysqli_real_escape_string($dbConnection, $username);
$password = mysqli_real_escape_string($dbConnection, $password);
$email = mysqli_real_escape_string($dbConnection, $email);

在上述代码中,$dbConnection是数据库连接对象。

  1. 错误处理

在表单验证过程中,可能会出现一些错误,例如用户名已被占用、密码过弱等。针对这些情况,我们应该提供相应的错误提示。在验证代码中,使用$errors数组来存储错误信息,并在表单中显示这些错误信息:

$errors = array();

// 验证用户名是否已经被占用
if (usernameExists($username)) {
    $errors['username'] = "用户名已经被占用";
}

// 验证密码强度
if (isWeakPassword($password)) {
    $errors['password'] = "密码过弱";
}

// 显示错误信息
if (!empty($errors)) {
    foreach ($errors as $error) {
        echo $error . "<br>";
    }
}

在上述代码中,usernameExists()isWeakPassword()rrreee

Im obigen Code wird die Funktion filter_input() zum Filtern eines einzelnen Eingabefelds und die Funktion filter_input_array() zum Filtern mehrerer Eingabefelder verwendet. FILTER_SANITIZE_STRING wird zum Filtern von Zeichenfolgen und FILTER_SANITIZE_EMAIL zum Filtern von E-Mail-Adressen verwendet.

Als nächstes können wir reguläre Ausdrücke verwenden, um eine zusätzliche Validierung des Benutzernamens und Passworts durchzuführen. Stellen Sie beispielsweise sicher, dass der Benutzername nur Buchstaben, Zahlen und Unterstriche enthält und zwischen 3 und 20 Zeichen lang ist:

rrreee

Ebenso können wir eine Regex-Validierung für andere Felder durchführen, die eine weitere Validierung erfordern. 🎜🎜Stellen Sie abschließend sicher, dass Benutzereingabedaten mithilfe geeigneter Escape-Funktionen maskiert werden, bevor Sie sie in der Datenbank speichern, um SQL-Injection-Angriffe zu verhindern. Verwenden Sie beispielsweise die Funktion mysqli_real_escape_string(), um Daten zu maskieren: 🎜rrreee🎜Im obigen Code ist $dbConnection das Datenbankverbindungsobjekt. 🎜
    🎜Fehlerbehandlung🎜🎜🎜Während des Formularüberprüfungsprozesses können einige Fehler auftreten, z. B. wenn der Benutzername belegt ist, das Passwort zu schwach ist usw. Für diese Situationen sollten wir entsprechende Fehlermeldungen bereitstellen. Verwenden Sie im Validierungscode das Array $errors, um Fehlermeldungen zu speichern und diese Fehlermeldungen in der Form anzuzeigen: 🎜rrreee🎜Im obigen Code sind usernameExists() und isWeakPassword() ist eine benutzerdefinierte Verifizierungsfunktion, mit der überprüft wird, ob der Benutzername belegt ist und ob das Passwort zu schwach ist. 🎜🎜Zusammenfassend lässt sich sagen, dass wir durch die ordnungsgemäße Einrichtung des Formulars und das Schreiben eines sicheren Bestätigungscodes Benutzereingabedaten effektiv filtern und überprüfen und die Sicherheit von Webanwendungen verbessern können. Natürlich sind neben der Front-End-Verifizierung auch Back-End-Sicherheitsmaßnahmen unerlässlich, beispielsweise die Verwendung vorbereiteter Anweisungen zur Verhinderung von SQL-Injection und anderen Angriffen. 🎜🎜Das Obige ist eine Einführung in die Verwendung von PHP zum Schreiben einer sicheren Formularvalidierung. Hoffe es hilft! 🎜

Das obige ist der detaillierte Inhalt vonWie schreibe ich eine sichere Formularvalidierung mit PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn