Pengesahan Borang PHP
Dalam bab ini kami akan memperkenalkan cara menggunakan PHP untuk mengesahkan data borang yang dihantar oleh pelanggan.
Input pengguna hendaklah disahkan (melalui skrip klien) apabila boleh. Pengesahan penyemak imbas lebih pantas dan mengurangkan beban pada pelayan.
Jika input pengguna perlu dimasukkan ke dalam pangkalan data, anda harus mempertimbangkan untuk menggunakan pengesahan pelayan. Cara yang baik untuk mengesahkan borang pada pelayan adalah dengan menghantar borang itu kepada dirinya sendiri, dan bukannya melompat ke halaman lain. Dengan cara ini pengguna boleh mendapatkan mesej ralat pada halaman borang yang sama. Ia akan lebih mudah bagi pengguna untuk mencari ralat.
Kita perlu mempertimbangkan keselamatan semasa memproses borang PHP.
Dalam bab ini kami akan menunjukkan pemprosesan data borang PHP yang selamat Untuk mengelakkan penggodam dan spam, kami perlu melakukan pengesahan keselamatan data pada borang tersebut.
Contoh pengesahan borang PHP
Borang di atas menggunakan peraturan pengesahan berikut:
Mula-mula kita lihat kod HTML tulen borang ini:
Medan teks
nama, e-mel dan tapak web ialah elemen input teks dan medan ulasan ialah kotak teks. Kod HTML adalah seperti ini:
Name: <input type="text" name="name"> E-mail: <input type="text" name="email"> Website: <input type="text" name="website"> Comment: <textarea name="comment" rows="5" cols="40"></textarea>
Butang radio
Medan jantina ialah butang Pilih tunggal, kod HTML adalah seperti ini:
Gender: <input type="radio" name="gender" value="female">Female <input type="radio" name="gender" value="male">Male
Elemen borang
Kod HTML untuk borang adalah seperti ini:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Apabila borang ini diserahkan, data borang dihantar melalui method="post".
Apakah pembolehubah $_SERVER["PHP_SELF"]?
$_SERVER["PHP_SELF"] ialah pembolehubah super global yang mengembalikan nama fail bagi skrip yang sedang dilaksanakan.
Oleh itu, $_SERVER["PHP_SELF"] menghantar data borang ke halaman itu sendiri dan bukannya melompat ke halaman lain. Dengan cara ini, pengguna boleh mendapatkan maklumat mesej ralat pada halaman borang.
Apakah fungsi htmlspecialchars()?
fungsi htmlspecialchars() menukar aksara khas kepada entiti HTML. Ini bermakna aksara HTML seperti < Ini menghalang penyerang daripada mengeksploitasi kod dengan menyuntik kod HTML atau JavaScript ke dalam bentuk (serangan skrip merentas tapak).
Peringatan penting tentang keselamatan borang PHP
$_SERVER["PHP_SELF"] boleh dieksploitasi oleh penggodam!
Jika halaman anda menggunakan PHP_SELF, pengguna boleh memasukkan garis bawah dan melaksanakan skrip merentas tapak (XSS).
Petua: Penskripan silang tapak (XSS) ialah sejenis kerentanan keselamatan komputer yang biasa ditemui dalam aplikasi web. XSS membolehkan penyerang memasukkan skrip sebelah klien ke dalam halaman web yang dilihat oleh pengguna lain.
Andaikan kita mempunyai borang berikut dalam halaman bernama "test_form.php":
<form method="post" action= "< ?php echo $_SERVER["PHP_SELF"];?>">
Sekarang, jika pengguna memasukkan URL biasa dalam bar alamat: "http://www.php.cn /test_form.php", kod di atas akan ditukar kepada:
<form method="post" action="test_form.php">
Sehingga kini , semuanya normal.
Walau bagaimanapun, jika pengguna menaip URL berikut dalam bar alamat:
http://www.php.cn/test_form.php/%22%3E%3Cscript%3Ealert(' php ')%3C/script%3E
Dalam kes ini, kod di atas akan ditukar kepada:
<form method="post" action="test_form.php "/><script>alert('php')</script>
Kod ini menambah skrip dan arahan segera. Dan apabila halaman dimuatkan, kod JavaScript akan dilaksanakan (pengguna akan melihat petua alat). Ini hanyalah contoh mudah dan tidak berbahaya tentang cara pembolehubah PHP_SELF boleh dieksploitasi.
Anda harus sedar bahawa teg <skrip> boleh mengandungi sebarang kod JavaScript! Penggodam boleh mengubah hala pengguna ke fail pada pelayan lain dan kod hasad dalam fail itu boleh menukar pembolehubah global atau menyerahkan borang ke alamat lain untuk menyimpan data pengguna, dsb.
Bagaimana untuk mengelakkan $_SERVER["PHP_SELF"] daripada dieksploitasi?
Menggunakan fungsi htmlspecialchars() boleh menghalang $_SERVER["PHP_SELF"] daripada dieksploitasi.
Kod borang adalah seperti ini:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" > ;
fungsi htmlspecialchars() menukar aksara khas kepada entiti HTML. Sekarang, jika pengguna cuba mengeksploitasi pembolehubah PHP_SELF, ia akan menghasilkan output berikut:
<form method="post" action="test_form.php/"><script>alert( 'php')< /script>">
Tidak boleh dieksploitasi, tiada bahaya!
Sahkan data borang melalui PHP
Kita perlu lakukan Perkara pertama ialah lulus semua pembolehubah melalui fungsi htmlspecialchars() PHP
Selepas kita menggunakan fungsi htmlspecialchars(), jika pengguna cuba menyerahkan perkara berikut dalam teks. medan:
< ;script>location.href('http://www.php.cn')</script>
- Kod tidak akan dilaksanakan kerana ia akan disimpan sebagai kod melarikan diri, seperti Seperti ini:
<script>location.href('http://www.php.cn')</script>
Kini kod ini dipaparkan pada halaman atau dalam e- mel selamat.
Apabila pengguna menyerahkan borang, kita perlu melakukan dua perkara lagi:
1 (Melalui fungsi trim() PHP) Alih keluar aksara yang tidak diperlukan (ruang tambahan) dalam data input pengguna. , tab, baris baharu)
2. (melalui fungsi PHP stripslashes()) Alih keluar garis miring ke belakang dalam data input pengguna ()
Seterusnya kami mencipta fungsi semak (berbanding dengan Menulis kod berulang kali menjadikannya lebih cekap).
Kami menamakan fungsi test_input().