PHP Filters (Filter)

Ang PHP filter ay ginagamit para sa pagpatotoo at pag-filter ng data na mula sa hindi ligtas na pinanggagalingan, tulad ng input ng user.

Ano ang PHP filter?

Ang PHP filter ay ginagamit para sa pagpatotoo at pag-filter ng data na mula sa hindi ligtas na pinanggagalingan.

Ang pagpatotoo at pag-filter ng input ng user o anumang custom data ay mahalagang bahagi ng anumang web application.

Ang layunin ng pagdesenyo ng PHP filter extension ay upang gawing mas madali at mas mabilis ang pag-filter ng data.

Bakit gamitin ang filter?

Halos lahat ng web application ay umiiral sa panlabas na input. Ang mga datos na ito ay karaniwang mula sa mga user o iba pang application (tulad ng web service). Sa pamamagitan ng paggamit ng filter, masasigurado mo na makakakuha ang application ng tamang uri ng input.

Dapat mong palaging ipag-filter ang external data!

Ang pag-filter ng input ay isa sa pinakamahalagang paksa sa seguridad ng application.

Ano ang external data?

  • Input data mula sa form
  • Cookies
  • Server variable
  • Resulta ng query sa database

Function at Filter

Para sa pag-filter ng variable, gamit ang alinman sa mga sumusunod na function ng filter:

  • filter_var() - Ipag-filter ang isang variable sa pamamagitan ng tinukoy na filter
  • filter_var_array() - Ipag-filter ang ilang variable sa pamamagitan ng magkakahiwalay o magkaparehong filter
  • filter_input - Makuha ang isang input variable, at ipag-filter ito
  • filter_input_array - Makuha ang ilang input variable, at ipag-filter sa pamamagitan ng magkakahiwalay o magkaparehong filter

Sa mga sumusunod na halimbawa, gamit namin ang function na filter_var() upang patunayan ang isang integer:

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

Ang nakaraang code ay gumamit ng filter "FILTER_VALIDATE_INT" upang filter ang variable. Dahil ang integer ay lehitimo, ang output ng code ay: "Integer is valid".

Kung sinusubukan naming gamitin ang isang variable na hindi integer, ang output ay: "Integer is not valid".

Para sa kumpletong listahan ng function at filter, mangyaring bisitahin ang aming PHP Filter Reference Manual.

Validating at Sanitizing

Mayroong dalawang filter:

Validating Filter:

  • Ginagamit upang patunayan ang pag-iingat ng input ng user
  • Mahigpit na patakaran ng format (gaya ng pagtutukoy ng URL o E-Mail)
  • Binabalik ang inaasahang uri kapag matagumpay, binabalik ang FALSE kapag nabigo

Sanitizing Filter:

  • Ginagamit upang payagan o ipagbawal ang tinukoy na character sa string
  • Wala ng formatong patakaran ng datos
  • Palaging binabalik ang string

Opsyon at Tanda

Ang opsyon at tanda ay ginagamit upang magdagdag ng karagdagang opsyon sa tinukoy na filter.

Mayroong iba't ibang opsyon at tanda sa iba't ibang filter.

Sa mga sumusunod na halimbawa, gamit namin ang filter_var() at "min_range" at "max_range" na opsyon upang patunayan ang isang integer:

<?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");
 }
?>

Tulad ng code sa itaas, ang opsyon ay dapat ilagay sa isang related array na may pangalang "options". Kung ginagamit ang tanda, hindi kailangan ilagay sa array.

Dahil ang integer ay "300", ito ay hindi nasa tinutukang saklaw, ang output ng code ay "Integer is not valid".

Para sa kumpletong listahan ng function at filter, bisitahin ang CodeW3C.com na inilalagay. PHP Filter Reference ManualMaaari mong makita ang mga magagamit na opsyon at tanda ng bawat filter.

Patunayan ang input

Hilingin naming patunayan ang input na nanggaling sa form.

Ang unang bagay na kailangan naming gawin ay tiyakin na mayroong ang input data na naghahanap tayo.

Pagkatapos, gamitin natin ang function na filter_input() upang ipasuri ang input data.

Sa mga sumusunod na halimbawa, ang variable ng input na "email" ay inililipat sa PHP page:

<?php
if(!filter_has_var(INPUT_GET, "email"))
 {
 echo("Input type does not exist");
 }
else
 {
 if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
  {
  echo "E-Mail is not valid";
  }
 else
  {
  echo "E-Mail is valid";
  }
 }
?>

Example Explanation:

Ang halimbawa sa itaas ay may input variable (email) na inililipat sa pamamagitan ng "GET" method:

  1. Detekta kung mayroong "GET" uri ng "email" variable ng input
  2. Kung mayroong variable ng input, detekta kung ito ay isang wastong email address

Nilinis ang input

Hilingin naming nilinis ang URL na nanggaling sa form.

Una, kailangan naming tiyakin na mayroong ang input data na naghahanap tayo.

Pagkatapos, gamitin natin ang function na filter_input() upang nilinis ang input data.

Sa mga sumusunod na halimbawa, ang variable ng input na "url" ay inililipat sa PHP page:

<?php
if(!filter_has_var(INPUT_POST, "url"))
 {
 echo("Input type does not exist");
 }
else
 {
 $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL);
 }
?>

Example Explanation:

Ang halimbawa sa itaas ay may input variable (url) na inililipat sa pamamagitan ng "POST" method:

  1. Detekta kung mayroong "POST" uri ng "url" variable ng input
  2. Kung mayroong ang variable ng input na ito, ay kailangan itong nilinis (tanggal ang ilegal na character) at itong ilagay sa $url variable

Kung ang variable ng input ay katulad nito: "http://www.W3非o法ol.com.c字符n/", ang napapalitan na $url variable ay dapat tulad nito:

http://www.codew3c.com/

Mag-filter ng maraming input

Ang form ay maging binubuo ng maraming input field. Upang maiwasan ang pag-ulit ng paggamit ng filter_var o filter_input, maaari naming gamitin ang filter_var_array o ang function na filter_input_array.

Sa kasong ito, gumagamit kami ng function na filter_input_array() upang mag-filter ng tatlong GET variable. Ang na-接收 na GET variable ay isang pangalan, isang edad at isang address ng 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("Age must be a number between 1 and 120.<br />");
 }
elseif (!$result["email"])
 {
 echo("E-Mail is not valid.<br />");
 }
else
 {
 echo("User input is valid");
 }
?>

Example Explanation:

Ang halimbawa na ito ay may tatlong input variable na inilipat sa pamamagitan ng paraan na "GET" (name, age at email)

  1. I-set ang isang array, na naglalaman ng pangalan ng variable ng input at ang tagapagbubunyag na ginamit para sa mga tinukoy na variable ng input
  2. Tumawag sa function na filter_input_array, ang mga argumento ay ang mga variable ng GET input at ang array na na-set up
  3. Suriin kung ang mga variable na "age" at "email" sa variable na $result ay may ilegal na input. (Kung mayroong ilegal na input,)

Ang pangalawang argumento ng function na filter_input_array() ay maaaring maging array o isang ID ng isang tagapagbubunyag.

Kung ang parametro ay isang ID ng isang tagapagbubunyag, ang tinukoy na tagapagbubunyag ay magbubunyag ng lahat ng halaga sa input array.

Kung ang parametro ay isang array, dapat sumunod ang array sa mga patakaran na ito:

  • It must be an associative array containing the input variables as the keys of the array (for example, the "age" input variable)
  • The values of this array must be the filter ID, or an array that specifies the filter, flags, and options

Using Filter Callback

By using the FILTER_CALLBACK filter, you can call a custom function and use it as a filter. In this way, we have complete control over data filtering.

You can create your own custom function or use existing PHP functions.

Specify the method you want to use for the filter function, the same as specifying the options.

In the following example, we use a custom function to convert all "_" to spaces:

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

The result of the above code is as follows:

Peter is a great guy!

Example Explanation:

The above example converts all "_" to spaces:

  1. Create a function that replaces "_" with a space
  2. Call the filter_var() function, its parameters are FILTER_CALLBACK filter and an array containing our function