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.
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.
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>
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
是数据库连接对象。
在表单验证过程中,可能会出现一些错误,例如用户名已被占用、密码过弱等。针对这些情况,我们应该提供相应的错误提示。在验证代码中,使用$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
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 fungsimysqli_real_escape_string()
untuk melepaskan data: 🎜rrreee🎜Dalam kod di atas, $dbConnection
ialah objek sambungan pangkalan data. 🎜$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!