PHP Filters (Filter)

PHP Filter ໃຊ້ເພື່ອກວດສອບແລະການກວດສອບຂໍ້ມູນຈາກແຫຼ່ງທີ່ບໍ່ປອດໄພ, ອີງຕາມຂໍ້ມູນຈາກຜູ້ນຳໃຊ້.

ວ່າແມ່ນຫຍັງ PHP Filter?

PHP Filter ໃຊ້ເພື່ອກວດສອບແລະການກວດສອບຂໍ້ມູນຈາກແຫຼ່ງທີ່ບໍ່ປອດໄພ.

ການກວດສອບແລະການກວດສອບຂໍ້ມູນຈາກຜູ້ນຳໃຊ້ຫຼືຂໍ້ມູນສະເພາະແມ່ນສ່ວນໃຫຍ່ຂອງຄວາມອາຄານທາງເວັບໄຊ.

ຈຸດປະສົງຂອງການອອກຂໍ້ມູນ PHP Filter Extension ���ິກັນແມ່ນເພື່ອເຮັດໃຫ້ການກວດສອບຂໍ້ມູນຫຼາຍຂື້ນ.

ວ່າເປັນຫຍັງຈະໃຊ້ສະເພາະ?

ທຸກຄວາມອາຄານທາງເວັບໄຊທົ່ວໄປກຳລັງຈະຕ້ອງການຂໍ້ມູນຈາກບາງພາກສ່ວນຕ່າງໆຫຼາຍຢ່າງ. ຂໍ້ມູນນີ້ຈະມາຈາກຜູ້ນຳໃຊ້ຫຼືຄວາມອາຄານອື່ນໆ(ອີງຕາມບໍລິການເວັບໄຊ). ພາຍໃນການໃຊ້ສະເພາະ, ທ່ານສາມາດຮັບປະກັນວ່າຄວາມອາຄານທີ່ມາຈາກຜູ້ນຳໃຊ້ຈະມີຊັບຊ້ອນຕາມບາງທາງ.

您应该始终对外部数据进行过滤!

输入过滤是最重要的应用程序安全课题之一。

ຫົກຫຼມູນພາຍາດແມ່ນຫຍັງ?

  • ຂໍ້ມູນສົ່ງມາຈາກຫົວຂໍ້ອອກສຳນັກງານ
  • Cookies
  • ຄຳເວົ້າຂອງທໍານຽມ
  • ຜົນຄົ້ນພົບຂອງການສອບສວນຂໍ້ມູນທະນາຄານ

ຫົວວິການ ແລະ ພວກຄູ່ມືການວິການ

ເພື່ອວິການຈຳນວນຫົກຫຼມູນ ຂໍ້ສະເໜີຫົກຫຼມູນທີ່ພວກມືການວິການເລືອກທີ່ພວກເຮົາຈະໃຊ້:

  • filter_var() - ວິການພວກມືການວິການຫຼມູນດຽວກັນດຽວໃນຄວາມຈິງ.
  • filter_var_array() - ວິການພວກມືການວິການຫຼມູນຫຼາຍບ່ອນໃນດຽວກັນ ຫຼື ພວກມືການວິການຕ່າງກັນ.
  • filter_input - ການຄົ້ນພົບຫົກຫຼມູນຂອງຂໍ້ມູນ ແລະ ວິການພວກມືການວິການ.
  • filter_input_array - ການຄົ້ນພົບຫົວວິການຂອງຫົກຫຼມູນຂອງຂໍ້ມູນ ແລະ ວິການພວກມືການວິການ.

ໃນຕົວຢ່າງດັ່ງກ່າວນີ້,ພວກເຮົາໃຊ້ຫົວວິການ filter_var() ເພື່ອວິການຈຳນວນ:

<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
 {
 echo("ຈຳນວນບໍ່ຖືກວິການຢ່າງດີ");
 }
else
 {
 echo("ຈຳນວນໄດ້ຖືກວິການຢ່າງດີ");
 }
?>

ວິກິດຈະການດັ່ງກ່າວນີ້ໃຊ້ພວກຄູ່ມື FILTER_VALIDATE_INT ເພື່ອວິການຈຳນວນ. ຍ້ອນຈຳນວນນີ້ແມ່ນຖືກຢ່າງດີ ຈະມີການອອກສຽງວ່າ: "Integer is valid"。

ຖ້າພວກເຮົາພະຍາຍາມໃຊ້ຄຳເວົ້າທີ່ບໍ່ແມ່ນຈຳນວນທີ່ຖືກຢ່າງດີນັ້ນຈະມີການອອກສຽງວ່າ: "Integer is not valid"。

ເພື່ອບັນທຶກທັງໝົດຂອງຫົວວິການ ແລະ ພວກຄູ່ມືການວິການຈະຢູ່ທີ່: PHP Filter Reference Manual

Validating ແລະ Sanitizing

ມີສອງພວກຄູ່ມື:

ພວກຄູ່ມືວິການຢືດຢັນ:

  • ຂອງການວິການຄຳເວົ້າຂອງຜູ້ໃຊ້
  • ກົດລະບຽບຂັ້ນຄົງ (ເຊັ່ນ URL ແລະ E-Mail ວິການຢືດຢັນ)
  • ຖືກກັບມາຕາມຕົວແທນທີ່ກໍານົດກ່ອນ ຖ້າສຳເລັດ ແລະ FALSE ຖ້າບໍ່ສຳເລັດ

ພວກຄູ່ມືວິການປັບປຸງ:

  • ຂອງການວິການຄຳເວົ້າໃນການອະນຸຍາດ ແລະ ຫາຍຫາຄຳເວົ້າທີ່ກໍານົດກ່ອນ
  • ບໍ່ມີກົດລະບຽບຂອງຂໍ້ມູນ
  • ມີຄວາມຈິງກັບຄຳເວົ້າ

ຕົວແທນ ແລະ ສັນຍາລະບາຍ

ຕົວແທນ ແລະ ສັນຍາລະບາຍຂອງພວກມີປະສົງຕໍ່ຕັ້ງຢູ່ພວກຄູ່ມືການວິການ.

ພວກຄູ່ມືການວິການມີຕົວແທນ ແລະ ສັນຍາລະບາຍຕ່າງກັນ.

ໃນຕົວຢ່າງດັ່ງກ່າວນີ້,ພວກເຮົາໃຊ້ filter_var() ແລະ "min_range" ແລະ "max_range" ຕົວແທນເພື່ອວິການຈຳນວນທີ່ຖືກຢ່າງດີ:

<?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("ຈຳນວນໄດ້ຖືກວິການຢ່າງດີ");
 }
?>

就像上面的代码一样,选项必须放入一个名为 "options" 的相关数组中。如果使用标志,则不需在数组内。

ຍ້ອນວ່າອັດຕາສິບສາມທີ່ "300" ບໍ່ຢູ່ໃນຂອບເຂດທີ່ກໍານົດໄວ້ທີ່ຫຼັງຈາກນັ້ນຄຳອອກຂອງລະບົບຈະເປັນ "Integer is not valid"。

ສຳລັບຊື່ວິທະຍານແລະພວກມັນທີ່ມີຢູ່ຂອງພວກມັນຢ່າງເຕັມຂົງຂອງ filter_input() ແລະ filter_has_var() ກະຈາຍຄືນຫາ CodeW3C.com PHP Filter Reference Manualພວກເຮົາສາມາດເຫັນການເລືອກຕົວເພື່ອພວກມັນທີ່ມີຢູ່ຂອງພວກມັນ.

ກວດສອບຂໍ້ມູນການເຂົ້າມາ

ພວກເຮົາພະຍາຍາມກວດສອບຂໍ້ມູນການເຂົ້າມາຈາກຟອມ.

ສິ່ງທີ່ພວກເຮົາຕ້ອງການຢືນຢັນທຳອິດແມ່ນວ່າມີຂໍ້ມູນການເຂົ້າມາທີ່ພວກເຮົາກຳລັງຊອກຫາ.

ຫຼັງຈາກນັ້ນພວກເຮົາໃຊ້ຫົວຫນັງ filter_input() ເພື່ອກຳລັງກວດສອບຂໍ້ມູນການເຂົ້າມາ.

ໃນຄັນຄືນທີ່ກ່າວກ່າວນີ້ຈະມີພວກມັນທີ່ການເຂົ້າມາ "email" ທີ່ສົ່ງຜ່ານ PHP ເວັບໄຊ:

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

ການອະທິບາຍຕົວຢ່າງ:

ບັນທັງທີ່ກ່າວກ່າວນີ້ມີພວກມັນທີ່ການເຂົ້າມາ (email) ທີ່ສົ່ງຜ່ານ "GET"

  1. ກວດສອບວ່າມີພວກມັນທີ່ການເຂົ້າມາຊື່ "GET" ຂອງ "email"
  2. ຖ້າມີພວກມັນທີ່ການເຂົ້າມາຈະກວດສອບວ່າມັນເປັນທີ່ສົມບູນສະຖານະການອີເມວ

ປັບປຸງຂໍ້ມູນການເຂົ້າມາ

ພວກເຮົາພະຍາຍາມປັບປຸງ URL ທີ່ມາຈາກຟອມ.

ກ່ອນເທື່ອພວກເຮົາຕ້ອງການຢືນຢັນວ່າມີຂໍ້ມູນການເຂົ້າມາທີ່ພວກເຮົາກຳລັງຊອກຫາ.

ຫຼັງຈາກນັ້ນພວກເຮົາໃຊ້ຫົວຫນັງ filter_input() ເພື່ອປັບປຸງຂໍ້ມູນການເຂົ້າມາ.

ໃນຄັນຄືນທີ່ກ່າວກ່າວນີ້ຈະມີພວກມັນທີ່ການເຂົ້າມາ "url" ທີ່ສົ່ງຜ່ານ PHP ເວັບໄຊ:

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

ການອະທິບາຍຕົວຢ່າງ:

ບັນທັງທີ່ກ່າວກ່າວນີ້ມີພວກມັນທີ່ການເຂົ້າມາ (url) ທີ່ສົ່ງຜ່ານ "POST"

  1. ກວດສອບວ່າມີພວກມັນທີ່ການເຂົ້າມາຊື່ "POST" ຂອງ "url"
  2. ຖ້າມີພວກມັນທີ່ການເຂົ້າມານັ້ນຈະປັບປຸງ (ກຳລັງຕົວຕາມສິ່ງທີ່ບໍ່ຖືກກວດສອບ) ແລະບັນທຶກໃນທີ່ພິຈາລະນາ $url

ຖ້າມີພວກມັນທີ່ການເຂົ້າມາຄືກັບນັ້ນ: "http://www.W3非o法ol.com.c字符n/",ຫຼັງຈາກການປັບປຸງ $url ທີ່ພິຈາລະນາຄື:

http://www.codew3c.com/

ຈັດການມາຍັນການກະຈາຍຫລາຍຄວາມມາຍັນ:

ຟອມບັນທຶກຈະປະກອບດ້ວຍຫລາຍບັນທຶກການກະຈາຍ. ເພື່ອຫລຸດການເອິ້ນ filter_var ຫລື filter_input, ພວກເຮົາສາມາດໃຊ້ filter_var_array ຫລື filter_input_array:

ໃນບົດສະຫລຸບນັ້ນພວກເຮົາໃຊ້ຫົວຫລັກ filter_input_array() ເພື່ອຈັດການມາຍັນການກະຈາຍສາມມາຍັນການກະຈາຍ GET: GET ຊື່, GET ອາຍຸ ແລະ GET ອີເມວ:

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

ການອະທິບາຍຕົວຢ່າງ:

ບົດສະຫລຸບນັ້ນມີຄວາມມາຍັນການກະຈາຍທີ່ສົ່ງຕົວຈາກ "GET" (name, age ແລະ email):

  1. ການກະຈັດຄູ່ມາມາມາຫລາຍຄູ່ມາມາຫລາຍທີ່ບັນທຶກຊື່ມາຍັນການກະຈາຍແລະພຽງສະເໜີຄູ່ມາມາມາການຈັດການມາຍັນກະຈາຍ:
  2. ເອິ້ນຫົວຫລັກ filter_input_array() ພ້ອມດ້ວຍມາຍັນການກະຈາຍ GET ແລະຄູ່ມາມາມາທີ່ຖືກການການກະຈັດການກ່ອນໜ້າ:
  3. ກວດສອບມາຫາຄວາມກະຈາຍທີ່ບໍ່ຖືກກະຈັດການຂອງພັດຄວາມ "age" ແລະ "email" (ຖ້າມີຄວາມກະຈາຍທີ່ບໍ່ຖືກກະຈັດການ):

ພຽງສະເໜີທີສອງຂອງຫົວຫລັກ filter_input_array() ສາມາດເປັນຄູ່ມາມາມາຫລາຍຄູ່ມາມາຫລາຍຫລືບັນທຶກລະຫັດການກະຈາຍອັນຕິກັນຜູ້ສະເໜີ:

ຖ້າມາຍັນປະກອບດ້ວຍບັນທຶກລະຫັດການກະຈາຍອັນຕິກັນຜູ້ສະເໜີນັ້ນຈະຈັດກົດລະບຽບຄົນພາຍໃນອີກຄູ່ມາມາມາຄັນນັ້ນ:

ຖ້າມາຍັນປະກອບດ້ວຍຄູ່ມາມາມາຂອງຄັນຈະເປັນອີກຄູ່ມາມາມາຄັນນັ້ນຈະໄດ້ປະຕິບັດຕາມກົດລະບຽບດັ່ງຕໍ່ມາ:

  • ຄູ່ມືຕ້ອງເປັນອານຸສັນທີ່ມີລາຍການ, ທີ່ກວມມີສິນລະຍາຂອງວິທະຍາ (ອີງ: "age" ສິນລະຍາວິທະຍາ)
  • ຄູ່ມືຂອງອານຸສັນການບູລິບຕ້ອງເປັນອານຸສັນທີ່ມີລາຍການ, ຫຼື ອານຸສັນທີ່ເປັນຄູ່ມືຂອງອານຸສັນ, ກົນວຽກ ແລະ ການຕັ້ງຕົວການເລືອກ.

ຄູ່ມືຂອງຄູ່ມືຂອງອານຸສັນການບູລິບ, ຄືກັບຄູ່ມືຂອງອານຸສັນກົນວຽກ.

ການນໍາໃຊ້ Filter Callback

ພວກເຮົາສາມາດສ້າງບູລິບທີ່ເປັນພິເສດ, ຫຼືນຳໃຊ້ບູລິບ PHP ທີ່ມີຢູ່.

ການປະກາດກົນວຽກຂອງບູລິບກົນວຽກຂອງພວກເຮົາ, ຄືກັບການປະກາດກົນວຽກຂອງຕົວສະຖານະ.

ໃນຕົວຢ່າງທີ່ກ່າວກ່ອນນີ້, ພວກເຮົາໃຊ້ບູລິບທີ່ເຮັດໃຫ້ "_" ຕາມນ້ຳມັນ:

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

ຜົນຂອງວິທະຍານຂັ້ນຕົວນີ້ແມ່ນ:

Peter is a great guy!

ການອະທິບາຍຕົວຢ່າງ:

ຕົວຢ່າງທີ່ກ່າວກ່ອນໄດ້ປ່ຽນທຸກ "_" ຕາມນ້ຳມັນ:

  1. ສ້າງບູລິບທີ່ປ່ຽນ "_" ຕາມນ້ຳມັນ
  2. ເອິ້ນບູລິບ filter_var() ກັບພະຍາດ FILTER_CALLBACK ແລະ ອານຸສັນທີ່ກວມບູລິບຂອງພວກເຮົາ