Penapis PHP

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


Apakah itu 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?

· Data input daripada borang

· Kuki

· Data perkhidmatan web

· Pembolehubah pelayan

· Hasil pertanyaan pangkalan data


Fungsi dan Penapis

Untuk menapis pembolehubah, gunakan salah satu daripada fungsi penapis berikut:

· filter_var() - Menapis pembolehubah tunggal dengan penapis yang ditentukan

· filter_var_array() - Tapis berbilang pembolehubah dengan penapis yang sama atau berbeza

· filter_input - Dapatkan pembolehubah input dan gunakan Penapis

· filter_input_array - Dapatkan berbilang pembolehubah input dan tapisnya melalui penapis yang sama atau berbeza


Contoh

Dalam contoh berikut, Kami mengesahkan integer menggunakan fungsi filter_var():

FILTER_VALIDATE_INT Penapis menggunakan integer sebagai nilai pengesahan.

<?php
header("Content-type:text/html;charset=utf-8");
$int = 123;

if(!filter_var($int, FILTER_VALIDATE_INT))
{
    echo("不是一个合法的整数");
}
else
{
    echo("是个合法的整数");
}
?>

Hasil pelaksanaan program:

ialah integer sah


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


Mengesahkan dan Membersihkan

Terdapat dua jenis penapis:

Mengesahkan Bekas Penapisan:

· Digunakan untuk mengesahkan input pengguna

· Peraturan format yang ketat (seperti pengesahan URL atau E-Mel)

· Kembalikan jenis yang dijangkakan jika berjaya, jika Mengembalikan FALSE pada kegagalan

Membersihkan penapis:

· Digunakan untuk membenarkan atau melarang aksara yang ditentukan dalam rentetan

· Tiada peraturan format data

· Sentiasa kembalikan 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.


Contoh

Dalam contoh berikut, kami mengesahkan menggunakan filter_var() dengan pilihan "min_range" dan "max_range" Integer :

<?php
header("Content-type:text/html;charset=utf-8");
$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("是个合法的整数");
}
?>

Seperti kod di atas, pilihan mesti dimasukkan ke dalam tatasusunan yang 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 lawati Manual Rujukan Penapis PHP kami. Anda boleh melihat pilihan dan bendera yang tersedia untuk setiap penapis.


Mengesahkan input

Mari 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.


Contoh

Dalam contoh berikut, Input "e-mel" pembolehubah dihantar ke halaman PHP melalui GET:

<?php
header("Content-type:text/html;charset=utf-8");
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";
    }
}
?>

Hasil pelaksanaan program:

6.png

Penjelasan dengan contoh

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

1 Kesan sama ada terdapat pembolehubah input "e-mel" jenis "GET "

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


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.


Instance

Dalam contoh berikut, pembolehubah input "url" dihantar ke halaman PHP:

<?php
header("Content-type:text/html;charset=utf-8");
if(!filter_has_var(INPUT_GET, "url"))
{
    echo("没有 url 参数");
}
else
{
    $url = filter_input(INPUT_GET,
        "url", FILTER_SANITIZE_URL);
    echo $url;
}
?>

Penjelasan contoh

FILTER_SANITIZE_URL Penapis mengalih keluar semua aksara URL haram daripada rentetan.

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

1 Kesan sama ada terdapat pembolehubah input "url" jenis "GET"

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

Jika pembolehubah input ialah rentetan yang serupa dengan ini: " http:// www. ruåånoøøob.com/", maka pembolehubah $url yang disucikan adalah seperti berikut:

7.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.

Contoh

Kami menggunakan fungsi filter_input_array() untuk menapis tiga pembolehubah GET. Pembolehubah GET yang diterima ialah nama, umur dan alamat e-mel:

<?php
header("Content-type:text/html;charset=utf-8");
$filters = array
(
    "name" => array
    (
        "filter_has_var"=>FILTER_SANITIZE_STRING
    ),
    "age" => array
    (
        "filter_has_var"=>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("输入正确");
}
?>

Hasil pelaksanaan program:

8.png

Penjelasan contoh

Contoh di atas mempunyai tiga pembolehubah input (nama, umur dan e-mel) yang dihantar melalui kaedah "GET":

1 daripada pembolehubah input dan penapis yang digunakan untuk pembolehubah input yang ditentukan

2 Panggil fungsi filter_input_array(), parameter termasuk pembolehubah input GET dan tatasusunan hanya ditetapkan

3 hasil Adakah terdapat sebarang input haram dalam pembolehubah "umur" dan "e-mel" dalam pembolehubah? (Jika terdapat input yang menyalahi undang-undang, pembolehubah input adalah FALSE selepas menggunakan fungsi filter_input_array().)

Argumen kedua kepada 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:

· Mesti tatasusunan bersekutu di mana pembolehubah input adalah kunci kepada tatasusunan (Contohnya, pembolehubah input "umur")

· Nilai tatasusunan ini mestilah ID penapis atau tatasusunan yang menyatakan penapis, bendera dan pilihan


Gunakan Panggil Balik Penapis

FILTER_CALLBACK Penapis menggunakan fungsi yang ditentukan pengguna untuk menapis nilai

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

Contoh

Dalam contoh di bawah, kami menggunakan tersuai Fungsi menukar semua "_" kepada "."

<?php
header("Content-type:text/html;charset=utf-8");
function convertSpace($string)
{
    return str_replace("_", ".", $string);
}
$string = "www_php_cn!";
echo filter_var($string, FILTER_CALLBACK,
    array("options"=>"convertSpace"));
?>

Hasil berjalan program:

www.php.cn!

Penjelasan Contoh

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

1 menggantikan "_" dengan "."

2 Panggil fungsi filter_var(), yang parameternya ialah penapis FILTER_CALLBACK dan tatasusunan yang mengandungi fungsi kami


Meneruskan pembelajaran
||
<?php header("Content-type:text/html;charset=utf-8"); $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("不是一个合法的整数"); } else { echo("是个合法的整数"); } ?>
  • Cadangan kursus
  • Muat turun perisian kursus