Tutorial asas pembangunan PHP - penapis
1. Apakah itu penapis PHP?
Penapis PHP digunakan untuk mengesahkan dan menapis data daripada sumber tidak selamat, seperti input pengguna.
Menguji, mengesahkan dan menapis input pengguna atau data tersuai ialah bahagian penting dalam mana-mana aplikasi web.
Pelanjutan penapis PHP direka untuk menjadikan penapisan data lebih mudah dan pantas.
2. Mengapa menggunakan penapis?
Hampir semua aplikasi web bergantung pada input luaran. Data ini biasanya datang daripada pengguna atau aplikasi lain (seperti perkhidmatan web). Dengan menggunakan penapis, anda boleh memastikan bahawa aplikasi anda mendapat jenis input yang betul.
Anda hendaklah sentiasa menapis data luaran!
Penapisan input ialah salah satu topik keselamatan aplikasi yang paling penting.
Apakah data luaran?
Masukkan data daripada borang
Kuki
Data perkhidmatan web
Pembolehubah pelayan
Hasil pertanyaan pangkalan data
Fungsi dan penapisan
Untuk menapis pembolehubah, gunakan salah satu daripada fungsi penapis berikut:
filter_var() - Menapis pembolehubah tunggal dengan penapis yang ditentukan Pembolehubah
filter_var_array() - Tapis berbilang pembolehubah mengikut penapis yang sama atau berbeza
filter_input - Dapatkan pembolehubah input, dan tapiskannya
filter_input_array - mengambil berbilang pembolehubah input dan menapisnya dengan penapis yang sama atau berbeza
di bawah Dalam contoh, kami menggunakan fungsi filter_var() untuk mengesahkan integer: kodnya adalah sebagai berikut
<?php $int = 12443633; //验证一个数是不是整数 if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("不是一个合法的整数"); } else { echo("是个合法的整数"); } ?>
Output ditunjukkan dalam gambar di sebelah kanan
Nota: Anda boleh mencuba pembolehubah lain untuk memerhatikan hasil output
4. Mengesahkan dan Membersihkan
Terdapat dua jenis penapisan:
Mengesahkan Penapis:
Digunakan untuk mengesahkan input pengguna
Peraturan pemformatan yang ketat (seperti pengesahan URL atau E-Mel)
Mengembalikan jenis yang dijangkakan jika berjaya, SALAH jika gagal
Penapis sanitasi:
Digunakan untuk membenarkan atau melarang aksara yang ditentukan dalam rentetan
Tiada peraturan format data
Sentiasa mengembalikan rentetan
5 Pilihan dan bendera
Pilihan dan bendera digunakan untuk menambah pilihan penapisan tambahan.
Penapis berbeza mempunyai pilihan dan bendera yang berbeza.
Dalam contoh di bawah, kami mengesahkan integer menggunakan filter_var() dengan pilihan "julat_min" dan "julat_maks":
Kodnya adalah seperti berikut
<?php $var=300; $int_options = array( "options"=>array ( "min_range"=>0, "max_range"=>256 ) ); if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) { echo("不是一个合法的整数"); } else { echo("是个合法的整数"); } ?>
Sama seperti kod di atas, pilihan mesti dimasukkan ke dalam tatasusunan berkaitan yang dipanggil "pilihan". Jika menggunakan bendera, mereka tidak perlu berada dalam tatasusunan.
Memandangkan integer ialah "300", ia tidak berada dalam julat yang ditentukan, output kod di atas ialah:
bukan integer sah
Untuk senarai lengkap fungsi dan penapis, sila lihat manual PHP
6. Sahkan input
Jom cuba Sahkan input daripada borang.
Perkara pertama yang perlu kami lakukan ialah mengesahkan bahawa data input yang kami cari wujud.
Kemudian kami menggunakan fungsi filter_input() untuk menapis data input.
Dalam contoh berikut, pembolehubah input "e-mel" dihantar ke halaman PHP:
<?php if(!filter_has_var(INPUT_GET, "email")) { echo("没有 email 参数"); } else { if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "不是一个合法的 E-Mail"; } else { echo "是一个合法的 E-Mail"; } } ?>
Contoh di atas mempunyai pembolehubah input (e-mel) yang melalui kaedah "GET":
Semak sama ada terdapat pembolehubah input "e-mel" jenis "GET"
Jika terdapat pembolehubah input, semak sama ada ia adalah alamat e-mel yang sah
7 Bersihkan input
Mari kami cuba membersihkan URL. lulus dari borang.
Pertama, kami ingin mengesahkan bahawa data input yang kami cari wujud.
Kemudian, kami menggunakan fungsi filter_input() untuk membersihkan data input.
Dalam contoh berikut, pembolehubah input "url" dihantar ke halaman PHP:
<?php if(!filter_has_var(INPUT_GET, "url")) { echo("没有 url 参数"); } else { $url = filter_input(INPUT_GET, "url", FILTER_SANITIZE_URL); echo $url; } ?>
Penjelasan contoh:
Di atas contoh mempunyai pembolehubah Input (url) yang dihantar melalui kaedah "GET":
Kesan sama ada terdapat pembolehubah input "url" jenis "GET"
Jika pembolehubah input ini wujud, bersihkan ia (memadamkannya) aksara yang tidak sah) dan menyimpannya dalam pembolehubah $url
8. Tapis berbilang input
Borang biasanya terdiri daripada berbilang terdiri daripada medan input. Untuk mengelakkan panggilan berulang ke fungsi filter_var atau filter_input, kita boleh menggunakan filter_var_array atau fungsi filter_input_array.
Dalam contoh ini, kami menggunakan fungsi filter_input_array() untuk menapis tiga pembolehubah GET. Pembolehubah GET yang diterima ialah nama, umur dan alamat e-mel:
Contohnya adalah seperti berikut
<?php $filters = array ( "name" => array ( "filter"=>FILTER_SANITIZE_STRING ), "age" => array ( "filter"=>FILTER_VALIDATE_INT, "options"=>array ( "min_range"=>1, "max_range"=>120 ) ), "email"=> FILTER_VALIDATE_EMAIL ); $result = filter_input_array(INPUT_GET, $filters); if (!$result["age"]) { echo("年龄必须在 1 到 120 之间。<br>"); } elseif(!$result["email"]) { echo("E-Mail 不合法<br>"); } else { echo("输入正确"); } ?>
Contoh penjelasan
The contoh di atas Terdapat tiga pembolehubah input (nama, umur dan e-mel) melalui kaedah "GET":
Menetapkan tatasusunan yang mengandungi nama pembolehubah input dan nama input pembolehubah untuk Penapis yang ditentukan
memanggil fungsi filter_input_array(), parameter termasuk pembolehubah input GET dan tatasusunan hanya ditetapkan
Mengesan " umur dalam pembolehubah $result " dan "e-mel" mempunyai input yang tidak sah. (Jika terdapat input yang tidak sah, pembolehubah input adalah PALSU selepas menggunakan fungsi filter_input_array().)
Parameter kedua bagi fungsi filter_input_array() boleh menjadi tatasusunan atau ID penapis tunggal.
Jika parameter ialah ID penapis tunggal, maka penapis yang ditentukan akan menapis semua nilai dalam tatasusunan input.
Jika parameter ialah tatasusunan, maka tatasusunan mesti mengikut peraturan berikut:
mestilah tatasusunan bersekutu yang mengandungi pembolehubah input yang merupakan kunci tatasusunan (seperti "umur " pembolehubah input )
Nilai tatasusunan ini mestilah ID penapis, atau tatasusunan yang menentukan penapis, bendera dan pilihan
9. Gunakan Tapis Panggilan Balik
Dengan menggunakan penapis FILTER_CALLBACK, anda boleh memanggil fungsi tersuai dan menggunakannya sebagai penapis. Dengan cara ini, kami mempunyai kawalan penuh ke atas penapisan data.
Anda boleh mencipta fungsi tersuai anda sendiri atau menggunakan fungsi PHP sedia ada.
Nyatakan fungsi penapis yang akan anda gunakan mengikut kaedah yang ditentukan bagi pilihan yang ditentukan. Dalam tatasusunan bersekutu, dengan nama "pilihan".
Dalam contoh di bawah, kami menggunakan fungsi tersuai untuk menukar semua "_" kepada ruang:
<?php function convertSpace($string) { return str_replace("_", ".", $string); } $string = "www_php_cn!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
Hasil output ditunjukkan di sebelah kanan
Contoh penjelasan
Contoh di atas menukarkan semua "_" kepada ".":
Buat fungsi yang menggantikan "_" dengan "
Panggil fungsi filter_var(), parameternya ialah penapis FILTER_CALLBACK dan tatasusunan yang mengandungi fungsi kami