Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menulis pengesahan borang selamat menggunakan PHP?

Bagaimana untuk menulis pengesahan borang selamat menggunakan PHP?

WBOY
WBOYasal
2023-08-26 20:04:531398semak imbas

Bagaimana untuk menulis pengesahan borang selamat menggunakan PHP?

Bagaimana untuk menulis pengesahan borang selamat menggunakan PHP?

Apabila membangunkan aplikasi web, borang adalah salah satu komponen penting. Melalui borang, kita boleh berinteraksi dengan pengguna dan mendapatkan data yang dimasukkan oleh pengguna. Walau bagaimanapun, data yang dimasukkan oleh pengguna selalunya tidak boleh dipercayai dan mungkin mengandungi kod hasad dan tingkah laku berniat jahat. Oleh itu, data input pengguna mesti disahkan dan ditapis sebelum diproses untuk memastikan keselamatan aplikasi. Artikel ini akan memperkenalkan cara menulis pengesahan borang selamat menggunakan PHP.

  1. Dayakan penapis PHP

PHP menyediakan beberapa penapis terbina dalam yang boleh digunakan untuk mengesahkan dan menapis data input pengguna. Pertama, kita perlu memastikan bahawa fungsi penapis PHP dihidupkan. Cari baris kod berikut dalam fail php.ini dan pastikan ia tidak diulas:

;extension=filter
;extension=filter_xss

Alih keluar koma bertitik sebelumnya dan simpan fail, kemudian mulakan semula pelayan web.

  1. Sediakan borang

Mula-mula, kita perlu menyediakan borang, mentakrifkan label borang dan medan input yang sepadan. Contohnya, buat borang pendaftaran dengan nama pengguna, kata laluan dan medan alamat e-mel:

<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. Tulis kod pengesahan

Selepas borang diserahkan, kami perlu menulis kod pengesahan untuk mengesahkan dan menapis data input pengguna. Pertama, kita boleh menggunakan fungsi penapis filter_input() dan filter_input_array() untuk mendapatkan dan menapis data input pengguna. 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

Dalam kod di atas, fungsi filter_input() digunakan untuk menapis medan input tunggal dan fungsi filter_input_array() digunakan untuk menapis berbilang medan input. FILTER_SANITIZE_STRING digunakan untuk menapis rentetan dan FILTER_SANITIZE_EMAIL digunakan untuk menapis alamat e-mel.

Seterusnya, kita boleh menggunakan ungkapan biasa untuk melakukan pengesahan tambahan pada nama pengguna dan kata laluan. Sebagai contoh, sahkan bahawa nama pengguna hanya mengandungi huruf, nombor dan garis bawah, dan panjangnya antara 3 dan 20 aksara:

rrreee

Begitu juga, kami boleh melakukan pengesahan regex untuk medan lain yang memerlukan pengesahan lanjut. 🎜🎜Akhir sekali, pastikan data input pengguna terlepas menggunakan fungsi melarikan diri yang sesuai sebelum menyimpannya dalam pangkalan data untuk mengelakkan serangan suntikan SQL. Contohnya, gunakan fungsi mysqli_real_escape_string() untuk melepaskan data: 🎜rrreee🎜Dalam kod di atas, $dbConnection ialah objek sambungan pangkalan data. 🎜
    🎜Ralat pengendalian🎜🎜🎜Semasa proses pengesahan borang, beberapa ralat mungkin berlaku, seperti nama pengguna telah diduduki, kata laluan terlalu lemah, dsb. Untuk situasi ini, kami harus menyediakan gesaan ralat yang sepadan. Dalam kod pengesahan, gunakan tatasusunan $errors untuk menyimpan mesej ralat dan memaparkan mesej ralat ini dalam bentuk: 🎜rrreee🎜Dalam kod di atas, usernameExists() dan isWeakPassword() ialah fungsi pengesahan tersuai yang digunakan untuk menyemak sama ada nama pengguna telah diduduki dan sama ada kata laluan terlalu lemah. 🎜🎜Ringkasnya, dengan menyediakan borang dengan betul dan menulis kod pengesahan selamat, kami boleh menapis dan mengesahkan data input pengguna dengan berkesan serta meningkatkan keselamatan aplikasi web. Sudah tentu, sebagai tambahan kepada pengesahan bahagian hadapan, langkah keselamatan bahagian belakang juga penting, seperti menggunakan pernyataan yang disediakan untuk mencegah suntikan SQL dan serangan lain. 🎜🎜Di atas adalah pengenalan kepada cara menggunakan PHP untuk menulis pengesahan borang selamat. Semoga ia membantu! 🎜

Atas ialah kandungan terperinci Bagaimana untuk menulis pengesahan borang selamat menggunakan PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn