Pengesahan borang PHP
Dalam bab ini kami akan memperkenalkan cara menggunakan PHP untuk mengesahkan data borang yang diserahkan oleh pelanggan.
Pengesahan borang PHP
|
Klik butang "Run Instance" untuk melihat contoh dalam talian
字段 | 验证规则 |
---|---|
名字 | 必须。 +只能包含字母和空格 |
必须。 + 必须是一个有效的电子邮件地址(包含'@'和'.') | |
网址 | 必须。如果存在,它必须包含一个有效的URL |
备注 | 必须。 多行输入字段(文本域) |
性别 | 必须。 必须选择一个 |
Peraturan pengesahan borang di atas adalah seperti berikut:
Mula-mula mari lihat HTML tulen Kod borang:
Medan teksMedan "Nama", "E-mel" dan "Laman Web" ialah elemen input teks dan " Catatan" medan ialah textarea. Kod HTML kelihatan seperti ini:
“名字”: <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>Butang radio
<input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男Elemen borang
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">Borang ini menggunakan
什么是 $_SERVER["PHP_SELF"] 变量? $_SERVER["PHP_SELF"]是超级全局变量,返回当前正在执行脚本的文件名,与 document root相关。 |
<🎜>Apakah pembolehubah $_SERVER["PHP_SELF"]?<🎜><🎜>< 🎜 > $_SERVER["PHP_SELF"] ialah pembolehubah super global yang mengembalikan nama fail skrip yang sedang dilaksanakan dan berkaitan dengan akar dokumen. |
Jadi, $_SERVER["PHP_SELF"] akan menghantar data borang ke halaman semasa dan bukannya melompat ke halaman lain.
Apakah kaedah htmlspecialchars()?
fungsi htmlspecialchars() Tukar beberapa aksara yang dipratentukan kepada entiti HTML. Aksara yang dipratentukan ialah:
|
Nyatakan nama fail borang berikut sebagai "test_form.php":
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">Sekarang, kami menggunakan URL untuk menentukan alamat penyerahan "test_form.php", kod di atas diubah suai seperti berikut:
<form method="post" action="test_form.php">Ini tidak mengapa.
Walau bagaimanapun, memandangkan pengguna akan memasukkan alamat berikut dalam bar alamat penyemak imbas:
http://www.php.cn/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E, URL di atas akan dihuraikan ke dalam kod berikut dan dilaksanakan:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>menambahkan teg skrip pada kod dan menambah arahan amaran. Kod Javascript ini akan dilaksanakan apabila halaman dimuatkan (pengguna akan melihat kotak pop timbul). Ini hanyalah contoh mudah bagaimana pembolehubah PHP_SELF boleh dieksploitasi oleh penggodam.
Sila ambil perhatian bahawa Sebarang kod JavaScript boleh ditambah dalam teg <skrip> Penggodam boleh menggunakan ini untuk mengubah hala halaman ke halaman pelayan lain. Kod hasad boleh dilindungi dalam fail kod dan kod itu boleh mengubah suai pembolehubah global atau mendapatkan data borang pengguna.
Bagaimana untuk mengelakkan $_SERVER["PHP_SELF"] daripada dieksploitasi?
$_SERVER["PHP_SELF"] boleh dielakkan dengan menggunakan fungsi htmlspecialchars().
Kod borang kelihatan seperti ini:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">htmlspecialchars() Tukar beberapa aksara yang dipratentukan kepada entiti HTML. Sekarang jika pengguna ingin mengambil kesempatan daripada Pembolehubah PHP_SELF, hasilnya akan dikeluarkan seperti berikut:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">gagal mencuba kelemahan ini!
Gunakan PHP untuk mengesahkan data borang
Pertama sekali, kami memproses semua data yang diserahkan oleh pengguna melalui fungsi htmlspecialchars() PHP.
Apabila kita menggunakan fungsi htmlspecialchars(), apabila pengguna cuba menyerahkan medan teks berikut:
<script>location.href('http://www.php.cn')</script>kod tidak akan dilaksanakan kerana ia akan disimpan sebagai HTML escape Kodnya adalah seperti berikut:
<script>location.href('http://www.php.cn')</script>Kod di atas adalah selamat dan boleh dipaparkan seperti biasa pada halaman atau dimasukkan ke dalam e-mel.
Apabila pengguna menyerahkan borang, kami akan melakukan dua perkara berikut:
1 Gunakan fungsi PHP trim() untuk mengalih keluar maklumat yang tidak berkaitan data input pengguna (seperti ruang, tab, baris baharu).
2 Gunakan fungsi PHP stripslashes() untuk membuang garis miring ke belakang dalam data input pengguna()
Seterusnya mari kita menapis ini Fungsinya ialah ditulis dalam fungsi yang ditakrifkan oleh kami sendiri, yang boleh meningkatkan kebolehgunaan semula kod dengan banyak.
Namakan fungsi test_input().
Kini, kita boleh mengesan semua pembolehubah dalam $_POST melalui fungsi test_input() Kod skrip adalah seperti berikut:
Instance
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>PHP中文网(php.cn)</title> </head> <body> <?php // 定义变量并默认设置为空值 $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; } ?> <h2>PHP 表单验证实例</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 名字: <input type="text" name="name"> <br><br> E-mail: <input type="text" name="email"> <br><br> 网址: <input type="text" name="website"> <br><br> 备注: <textarea name="comment" rows="5" cols="40"></textarea> <br><br> 性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男 <br><br> <input type="submit" name="submit" value="Submit"> </form> <?php echo "<h2>您输入的内容是:</h2>"; echo $name; echo "<br>"; echo $email; echo "<br>"; echo $website; echo "<br>"; echo $comment; echo "<br>"; echo $gender; ?> </body>
Jalankan Instance»
Klik butang "Run Instance" untuk melihat contoh dalam talian
Perhatikan bahawa apabila kami melaksanakan skrip di atas, kami akan menggunakan $_SERVER["REQUEST_METHOD"] untuk mengesan sama ada borang telah diserahkan. . Jika REQUEST_METHOD ialah POST, borang akan diserahkan - dan data akan disahkan. Jika borang tidak dihantar pengesahan akan dilangkau dan dipaparkan kosong.
Penggunaan item input dalam contoh di atas adalah pilihan dan boleh dipaparkan seperti biasa walaupun pengguna tidak memasukkan sebarang data.
Tutorial praktikal yang disyorkan: "Pengesahan Borang PHP"
Dalam bab seterusnya kami akan memperkenalkan cara melakukan pengesahan pada data yang dimasukkan oleh pengguna.