Manual belajar ...login
Manual belajar kendiri lengkap PHP
pengarang:php.cn  masa kemas kini:2022-04-15 13:53:54

Penapis PHP



Penapis PHP digunakan untuk mengesahkan dan menapis data daripada sumber tidak selamat, seperti input pengguna.


Apakah penapis PHP?

Penapis PHP digunakan untuk mengesahkan dan menapis data daripada sumber tidak selamat.

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.


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?

  • Input data daripada borang

  • Kuki

  • Data perkhidmatan web

  • Pembolehubah pelayan

  • Hasil pertanyaan pangkalan data


Fungsi dan penapis

seperti Kepada penapis pembolehubah, gunakan salah satu daripada fungsi penapis berikut:

  • filter_var() - Menapis pembolehubah tunggal dengan penapis tertentu

  • filter_var_array() - Tapis berbilang pembolehubah mengikut penapis yang sama atau berbeza

  • filter_input - Dapatkan pembolehubah input dan tapis

  • filter_input_array - Dapatkan berbilang pembolehubah input dan tapis mereka melalui penapis yang sama atau berbeza

Dalam contoh di bawah, kami menggunakan filter_var() Fungsi ini mengesahkan integer:

<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("不是一个合法的整数");
}
else
{
echo("是个合法的整数");
}
?>
Kod di atas menggunakan penapis "FILTER_VALIDATE_INT" untuk menapis pembolehubah. Memandangkan integer ini sah, kod di atas akan mengeluarkan:

75785ce638a46aa31c9d146d9e75580.png

Jika kita cuba menggunakan pembolehubah bukan integer (seperti "123abc"), ia akan mengeluarkan: "Integer tidak sah".

Untuk senarai lengkap fungsi dan penapis, lawati Manual Rujukan Penapis PHP kami.


Mengesahkan dan Membersihkan

Terdapat dua jenis penapis:

Mengesahkan penapis:

  • Gunakan Untuk mengesahkan input pengguna

  • Peraturan pemformatan yang ketat (seperti URL atau pengesahan E-mel)

  • Jika berjaya, kembalikan jenis yang dijangkakan, jika Mengembalikan FALSE pada kegagalan

Penapis sanitasi:

  • digunakan untuk membenarkan atau melarang aksara yang dinyatakan dalam rentetan

  • Tiada peraturan format data

  • Sentiasa mengembalikan rentetan


Pilihan dan Bendera

Pilihan dan bendera digunakan untuk menambah pilihan penapisan tambahan pada penapis yang ditentukan.

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":

<?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 masuk 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:

不是一个合法的整数

Untuk melihat senarai lengkap fungsi dan penapis , sila lawati manual rujukan Penapis PHP kami. Anda boleh melihat pilihan dan bendera yang tersedia untuk setiap penapis.


Mengesahkan input

Mari cuba mengesahkan 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";
}
}
?>
Keputusan ujian contoh di atas adalah seperti berikut:

c1d167d6363d1c794e07e5126748e69.png

Penjelasan contoh

Contoh di atas mempunyai pembolehubah input (e-mel) yang dihantar melalui kaedah "GET":

1 . Kesan sama ada "GET" wujud Pembolehubah input jenis "e-mel"

  1. 2. Jika terdapat pembolehubah input, semak sama ada ia adalah e-mel yang sah alamat


Sanitize input

Mari cuba bersihkan URL yang dihantar daripada 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

Contoh di atas mempunyai pembolehubah input (url) yang dihantar melalui kaedah "GET":

  1. Kesan sama ada terdapat " DAPATKAN" "url" pembolehubah input jenis

  2. Jika pembolehubah input ini wujud, bersihkan pembolehubah tersebut (alih keluar aksara haram) dan simpan dalam pembolehubah $url

Jika pembolehubah input ialah rentetan yang serupa dengan ini: "http://www.pååhøøp.cn/", pembolehubah $url yang disucikan akan kelihatan seperti ini:

4b5f3db5f8d9c66f453eaeec438ea7a.png


Tapis berbilang input

Borang biasanya terdiri daripada berbilang 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:

<?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("输入正确");
}
?>

Penjelasan contoh

Terdapat tiga contoh di atas Pembolehubah input (nama, umur dan e-mel) diluluskan melalui kaedah "GET":

  1. Menetapkan tatasusunan yang mengandungi nama pembolehubah input dan penapis untuk pembolehubah input yang ditentukan

  2. Panggil fungsi filter_input_array(), parameter termasuk pembolehubah input GET dan tatasusunan yang baru ditetapkan

  3. Kesan "umur" dan "umur" dalam $result variable Adakah terdapat sebarang input haram dalam pembolehubah "e-mel"? (Jika terdapat input yang tidak sah, pembolehubah input adalah FALSE selepas menggunakan fungsi filter_input_array().)

Parameter kedua bagi fungsi filter_input_array() boleh menjadi tatasusunan atau ID daripada satu penapis.

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 ( Contohnya, pembolehubah input "umur")

  • Nilai tatasusunan ini mestilah ID penapis atau tatasusunan yang menentukan penapis, bendera dan pilihan


Gunakan Panggilan Balik Penapis

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 berikut, 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"));
?>
Keputusan kod di atas adalah seperti berikut:

1024.png

Penjelasan Contoh

Contoh di atas menukarkan semua "_" kepada ".":

  1. Buat " _ " digantikan dengan "." Fungsi

  2. memanggil fungsi filter_var(), yang parameternya ialah penapis FILTER_CALLBACK dan tatasusunan

yang mengandungi fungsi kami

Laman web PHP Cina