Penyaring (Filter) PHP

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

Apakah penapis PHP?

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

Pengesahan dan penapisan input pengguna atau data pilihan adalah bagian penting dalam mana-mana aplikasi web.

Tujuannya untuk merancang ekstensi penapis PHP adalah untuk membuat penapisan data lebih mudah dan cepat.

Mengapa menggunakan penapis?

Sebarang aplikasi web kebanyakan bergantung kepada input luaran. Data ini biasanya berasal daripada pengguna atau aplikasi lain (seperti perkhidmatan web). Dengan menggunakan penapis, anda dapat memastikan bahawa aplikasi mendapat jenis input yang betul.

Anda sebaiknya selalu menapis data eksternal!

Penapisan input adalah salah satu topik keamanan aplikasi yang penting.

Apa itu data eksternal?

  • Input data dari formulir
  • Cookies
  • Variabel server
  • Hasil kueri database

Fungsi dan penapisan

Untuk menapis variabel, gunakan salah satu fungsi penapisan di bawah ini:

  • filter_var() - Menapis variabel tunggal melalui penapisan yang ditentukan
  • filter_var_array() - Menapis berbagai variabel melalui penapisan yang sama atau berbeda
  • filter_input - Mengambil variabel input satu dan menapisnya
  • filter_input_array - Mengambil berbagai variabel input dan menapisnya melalui penapisan yang sama atau berbeda

Dalam contoh di bawah ini, kami menggunakan fungsi filter_var() untuk memvalidasi bilangan bulat:

<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
 {
 echo("Integer is not valid");
 }
else
 {
 echo("Integer is valid");
 }
?>

Kode di atas menggunakan penapisan "FILTER_VALIDATE_INT" untuk menapis variabel. Karena bilangan bulat ini sah, output kode adalah: "Integer is valid".

Jika kami mencoba menggunakan variabel yang bukan bilangan bulat, outputnya adalah: "Integer is not valid".

Untuk daftar lengkap fungsi dan penapisan, silakan kunjungi Panduan Penapis PHP

Validating dan Sanitizing

Ada dua penapisan:

Penapisan Validating:

  • Untuk memvalidasi input pengguna
  • Aturan format yang ketat (seperti pengesahan URL atau E-Mail)
  • Jika sukses, kembalikan tipe yang diharapkan, jika gagal, kembalikan FALSE

Penapisan Sanitizing:

  • Untuk memungkinkan atau melarang karakter yang ditentukan di dalam string
  • Tidak ada aturan format data
  • Selalu mengembalikan string

Opsi dan tanda

Opsi dan tanda digunakan untuk menambahkan opsi penapisan ekstra ke penapisan yang ditentukan.

Penapisan yang berbeda memiliki berbagai opsi dan tanda.

Dalam contoh di bawah ini, kami menggunakan filter_var() dan pilihan "min_range" serta "max_range" untuk memvalidasi bilangan bulat:

<?php
$var=300;
$int_options = array(
"options"=>array
 (
 "min_range"=>0,
 "max_range"=>256
 )
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
 {
 echo("Integer is not valid");
 }
else
 {
 echo("Integer is valid");
 }
?>

Seperti kode di atas, opsi harus disimpan dalam array yang dinamai "options". Jika digunakan tanda, maka tidak perlu disimpan dalam array.

Karena bilangan bulat adalah "300", ia tidak berada dalam rentang yang ditentukan, output kode di atas akan adalah "Integer adalah tidak sah".

Untuk daftar lengkap fungsi dan penapis, kunjungi CodeW3C.com yang disediakan Panduan Penapis PHPAnda dapat melihat opsi dan tanda yang tersedia untuk setiap penapis.

Verifikasi input

Biarkan kami mencoba memverifikasi input yang datang dari formulir.

Yang pertama yang perlu kami lakukan adalah memastikan adanya data input yang kita cari.

Lalu kami menggunakan fungsi filter_input() untuk menyaring data input.

Dalam contoh di bawah, variable input "email" diangkut ke halaman PHP:

<?php
if(!filter_has_var(INPUT_GET, "email"))
 {
 echo("Tipe input tidak ada");
 }
else
 {
 if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
  {
  echo "E-Mail adalah tidak sah";
  }
 else
  {
  echo "E-Mail adalah sah";
  }
 }
?>

Pengertian contoh:

Contoh di atas ada variable input (email) yang diangkut melalui metode "GET":

  1. Periksa apakah ada variable input "email" jenis "GET"
  2. Jika ada variable input, periksa apakah itu adalah alamat email yang sah

Pembersihan input

Biarkan kami mencoba membersihkan URL yang datang dari formulir.

Pertama, kami harus memastikan adanya data input yang kita cari.

Lalu, kami menggunakan fungsi filter_input() untuk memurahkan data input.

Dalam contoh di bawah, variable input "url" diangkut ke halaman PHP:

<?php
if(!filter_has_var(INPUT_POST, "url"))
 {
 echo("Tipe input tidak ada");
 }
else
 {
 $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL);
 }
?>

Pengertian contoh:

Contoh di atas ada variable input (url) yang diangkut melalui metode "POST":

  1. Periksa apakah ada variable input "url" jenis "POST"
  2. Jika ada variable input ini, lakukan pembersihan (hapus karakter ilegal) dan simpan di variable $url

Jika variable input seperti ini: "http://www.W3非o法ol.com.c字符n/", maka variable $url setelah dipurifikasi seharusnya seperti ini:

http://www.codew3c.com/

Menapiskan beberapa input

Form biasanya terdiri dari banyak bidang input. Untuk menghindari pemanggilan berulang filter_var atau filter_input, kita dapat menggunakan filter_var_array atau fungsi filter_input_array.

Dalam contoh ini, kita menggunakan fungsi filter_input_array() untuk menapis tiga variabel GET. Variabel GET yang diterima adalah nama, umur serta alamat email:

<?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("Umur harus berupa angka antara 1 dan 120.<br />");
 }
elseif (!$result["email"])
 {
 echo("E-Mail tidak valid.<br />");
 }
else
 {
 echo("Input pengguna valid");
 }
?>

Pengertian contoh:

Contoh di atas memiliki tiga variabel input yang dikirim melalui metode "GET" (name, age dan email)

  1. Atur sebuah array yang mengandung nama variabel input serta penapisan untuk variabel input yang ditentukan
  2. Panggil fungsi filter_input_array, parameter termasuk variabel input GET serta array yang disetel sebelumnya
  3. Deteksi variabel $result untuk "age" dan "email" untuk memeriksa input yang ilegal.

Parameter kedua fungsi filter_input_array() dapat berupa array atau ID penapisan tunggal.

Jika parameter adalah ID penapisan tunggal, penapisan yang ditentukan akan menyaring semua nilai dalam array input.

Jika parameter adalah array, array itu harus mematuhi aturan di bawah ini:

  • Mesti adalah array hubungan, yang mengandungi variabel input yang adalah kunci array (contohnya "umur" variabel input)
  • Nilai array ini mesti adalah ID pemilih, ataupun array yang menentukan pemilih, tanda dan pilihan

Penggunaan Filter Callback

Dengan menggunakan pemilih FILTER_CALLBACK, anda boleh panggil fungsi yang disusun sendiri, dan gunakannya sebagai pemilih. Dengan cara ini, kita mendapat kawalan penuh atas pengurusan data.

Anda boleh membuat fungsi yang disusun sendiri sendiri, ataupun menggunakan fungsi PHP yang sudah ada.

Tentukan cara yang anda gunakan untuk menentukan fungsi pemilih, seperti cara menentukan pilihan.

Dalam contoh di bawah, kami menggunakan fungsi yang disusun sendiri untuk mengganti semua "_" dengan ruang:

<?php
function convertSpace($string)
{
return str_replace("_", " ", $string);
}
$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace"));
?>

Hasil kode di atas adalah seperti ini:

Peter adalah lelaki yang hebat!

Pengertian contoh:

Contoh di atas menggantikan semua "_" dengan ruang:

  1. Buatkan fungsi yang menggantikan "_" dengan ruang
  2. Panggil fungsi filter_var(), parameternya adalah pemilih FILTER_CALLBACK serta array yang mengandungi fungsi kami