Pengesahan bora...LOGIN

Pengesahan borang PHP


Pengesahan Borang HTML

Apabila borang digunakan untuk mengumpul maklumat input daripada pelanggan, jangan ambil mudah bahawa pelanggan akan memasukkan kandungan yang memenuhi peraturan seperti dijangka. Input pelanggan mesti disemak dengan ketat pada setiap masa.

Pengesahan pihak pelanggan

Pengesahan borang pihak pelanggan secara amnya merupakan kaedah pengesahan berdasarkan skrip Javascript dengan berkesan dapat mengurangkan beban pada pelayan dan juga boleh mengingatkan pelanggan dengan segera tentang input kesilapan.

Pengesahan bahagian pelayan

Dalam sesetengah kes, sebagai tambahan kepada pengesahan pihak pelanggan, pengesahan pihak pelayan juga mungkin diperlukan (seperti mengakses pangkalan data). Pada masa ini, pengesahan logik perlu dilakukan dalam program PHP.

Kita perlu mempertimbangkan keselamatan apabila berurusan dengan borang PHP.

Dalam bab ini kami akan menunjukkan pemprosesan keselamatan data borang PHP Untuk mengelakkan penggodam dan spam, kami perlu melakukan pengesahan keselamatan data pada borang.

Borang HTML yang diperkenalkan dalam bab ini mengandungi medan input berikut: medan teks yang diperlukan dan pilihan, butang radio dan butang serah:

form1.jpgLihat Kod »

Peraturan pengesahan borang di atas adalah seperti berikut:

Medan                                                                    +Hanya boleh memasukkan huruf dan ruang
E-mel. + Mestilah alamat e-mel yang sah (mengandungi '@' dan '.')

URL     Diperlukan. Jika ada, ia mesti mengandungi URL yang sah Catatan Diperlukan. Medan input berbilang baris (medan teks)

Jantina                                                                                                                                                                                                                          . Satu mesti dipilih

Mula-mula mari kita lihat kod borang HTML tulen:

Medan teks

Medan "Nama", "E-mel" dan "Laman Web" ialah elemen input teks dan medan "Catatan" ialah kawasan teks. Kod HTML adalah seperti berikut:

“Nama”: <input type="text" name="name">
">
                Tapak web: <input type="text " name="website">
                 Catatan: <textarea name="comment" rows="5" cols="40">< /textarea>
                                                                                                           >

Elemen Borang

Kod borang HTML adalah seperti berikut:

                                            htmlspecialchars ($ _ Server g”;
Borang ini menggunakan kaedah Method =" Post "untuk menyerahkan data.

Apakah pembolehubah $_SERVER["PHP_SELF"]?

$_SERVER["PHP_SELF"] ialah pembolehubah super global yang kembali semasa Nama fail skrip yang dilaksanakan, 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() menukar beberapa aksara yang dipratentukan kepada entiti HTML. Aksara pratakrif untuk

ialah:

& (ampersand) menjadi &
" (petikan berganda) menjadi "

' (petikan tunggal) ) menjadi<<(kurang daripada) menjadi<

> ?

$_SERVER["PHP_SELF"] boleh digunakan oleh penggodam

Apabila penggodam menggunakan pautan HTTP skrip merentas tapak untuk menyerang, pembolehubah pelayan $_SERVER["PHP_SELF"] juga akan dibenamkan dalam skrip. Sebabnya ialah skrip rentas tapak dilampirkan pada laluan fail boleh laku, jadi rentetan $_SERVER["PHP_SELF"] akan mengandungi kod program JavaScript di belakang pautan HTTP.

XSS juga dipanggil CSS (Cross-Site Skrip), serangan skrip merentas tapak. Penyerang berniat jahat memasukkan kod HTML berniat jahat ke dalam halaman Web Apabila pengguna menyemak imbas halaman, kod HTML yang dibenamkan dalam halaman Web akan dilaksanakan, dengan itu mencapai tujuan khas pengguna berniat jahat.

Nyatakan nama fail borang berikut sebagai "test_form.php":

<?php echo $_SERVER["PHP_SELF "];?>">

Sekarang, kami menggunakan URL untuk menentukan alamat penyerahan "test_form.php", kod di atas diubah suai seperti berikut ;

Walau bagaimanapun, pertimbangkan bahawa pengguna akan memasukkan alamat berikut dalam bar alamat penyemak imbas:

                                                                                                                                                                                                                     ('digodam')%3C/skrip%3E                                                                                                                                                                                                                                                  

<🎜 URL di atas akan dihuraikan ke dalam kod berikut dan dilaksanakan:

                                                      "test_form.php/"><<                                                                                                                                                                                                                                                                                                                                                     "test_form.php/">< ;skrip>amaran('digodam')</skrip> 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 Fail kod halaman boleh melindungi kod hasad, 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 adalah seperti berikut:

                                                                                                                                                                                                            

htmlspecialchars() Tukar beberapa aksara yang dipratentukan kepada entiti HTML. Sekarang jika pengguna ingin menggunakan pembolehubah PHP_SELF, hasilnya akan dikeluarkan seperti berikut:

& lt; kaedah borang = "post" tindakan = "test_form.php/& quot; & lt; skrip & gt; amaran ('digodam') & lt;/skrip & gt;

<尝> Cuba Kerentanan gagal!

Gunakan PHP untuk mengesahkan data borang

Pertama sekali, kami memproses semua data yang diserahkan oleh pengguna melalui fungsi htmlspecialchars() PHP.

Apabila kami menggunakan fungsi htmlspecialchars(), pengguna cuba menyerahkan medan teks berikut: ;/script> '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:

Gunakan fungsi PHP trim() untuk mengalih keluar aksara yang tidak diperlukan (seperti ruang, tab, baris baharu) dalam pengguna data input).

Gunakan fungsi PHP stripslashes() untuk membuang backslashes() dalam data input pengguna


Seterusnya mari kita tulis fungsi penapisan ini dalam fungsi yang kita tentukan sendiri, supaya sangat meningkatkan kebolehgunaan semula kod.

Namakan fungsi test_input().

Kini, kita boleh menggunakan fungsi test_input() untuk mengesan semua pembolehubah dalam $_POST Kod skrip adalah seperti berikut:

Instance

<?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;
}
?>

Perhatikan bahawa. kami Apabila skrip di atas dilaksanakan, $_SERVER["REQUEST_METHOD"] akan digunakan 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.

Dalam bab seterusnya kami akan memperkenalkan cara untuk mengesahkan data yang dimasukkan oleh pengguna.

bahagian seterusnya

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>PHP中文网</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>
babperisian kursus