PHP Filters (Filter)
- ຫນ້າຫນັງກ່ອນ PHP Exception
- ຫນ້າຫນັງ ການນຳໄຊ MySQL
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"
- ກວດສອບວ່າມີພວກມັນທີ່ການເຂົ້າມາຊື່ "GET" ຂອງ "email"
- ຖ້າມີພວກມັນທີ່ການເຂົ້າມາຈະກວດສອບວ່າມັນເປັນທີ່ສົມບູນສະຖານະການອີເມວ
ປັບປຸງຂໍ້ມູນການເຂົ້າມາ
ພວກເຮົາພະຍາຍາມປັບປຸງ 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"
- ກວດສອບວ່າມີພວກມັນທີ່ການເຂົ້າມາຊື່ "POST" ຂອງ "url"
- ຖ້າມີພວກມັນທີ່ການເຂົ້າມານັ້ນຈະປັບປຸງ (ກຳລັງຕົວຕາມສິ່ງທີ່ບໍ່ຖືກກວດສອບ) ແລະບັນທຶກໃນທີ່ພິຈາລະນາ $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):
- ການກະຈັດຄູ່ມາມາມາຫລາຍຄູ່ມາມາຫລາຍທີ່ບັນທຶກຊື່ມາຍັນການກະຈາຍແລະພຽງສະເໜີຄູ່ມາມາມາການຈັດການມາຍັນກະຈາຍ:
- ເອິ້ນຫົວຫລັກ filter_input_array() ພ້ອມດ້ວຍມາຍັນການກະຈາຍ GET ແລະຄູ່ມາມາມາທີ່ຖືກການການກະຈັດການກ່ອນໜ້າ:
- ກວດສອບມາຫາຄວາມກະຈາຍທີ່ບໍ່ຖືກກະຈັດການຂອງພັດຄວາມ "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!
ການອະທິບາຍຕົວຢ່າງ:
ຕົວຢ່າງທີ່ກ່າວກ່ອນໄດ້ປ່ຽນທຸກ "_" ຕາມນ້ຳມັນ:
- ສ້າງບູລິບທີ່ປ່ຽນ "_" ຕາມນ້ຳມັນ
- ເອິ້ນບູລິບ filter_var() ກັບພະຍາດ FILTER_CALLBACK ແລະ ອານຸສັນທີ່ກວມບູລິບຂອງພວກເຮົາ
- ຫນ້າຫນັງກ່ອນ PHP Exception
- ຫນ້າຫນັງ ການນຳໄຊ MySQL