กรอง PHP

กรอง PHP จะใช้ในการตรวจสอบและกรองข้อมูลจากแหล่งที่ไม่ปลอดภัยเช่นการป้อนข้อมูลของผู้ใช้


กรอง PHP คืออะไร?

กรอง PHP จะใช้ในการตรวจสอบและกรองข้อมูลจากแหล่งที่ไม่ปลอดภัย

การทดสอบตรวจสอบและผู้ใช้ป้อนตัวกรองหรือข้อมูลที่กำหนดเองเป็นส่วนสำคัญของโปรแกรมเว็บใด ๆ

ขยายตัวกรอง PHP ถูกออกแบบเพื่อให้การกรองข้อมูลได้ง่ายขึ้นและเร็วขึ้น


ใช้ตัวกรองทำไม?

เกือบทุกการใช้งานเว็บจะขึ้นอยู่กับปัจจัยการผลิตจากภายนอก ข้อมูลเหล่านี้มักจะมาจากผู้ใช้หรือโปรแกรมอื่น ๆ (เช่นบริการเว็บ) โดยใช้ตัวกรองคุณสามารถมั่นใจได้ว่าการใช้งานจะได้รับประเภทการป้อนข้อมูลที่ถูกต้อง

คุณควรกรองข้อมูลภายนอก!

การกรองการป้อนข้อมูลเป็นสิ่งสำคัญที่สุดปัญหาโปรแกรมรักษาความปลอดภัย

เป็นข้อมูลภายนอกอะไร?

  • การป้อนข้อมูลจากแบบฟอร์ม
  • คุ้กกี้
  • ข้อมูลบริการเว็บ
  • ตัวแปรเซิร์ฟเวอร์
  • ผลการสืบค้นฐานข้อมูล

ฟังก์ชั่นและตัวกรอง

เพื่อกรองตัวแปรใช้หนึ่งในฟังก์ชั่นกรองต่อไปนี้:

  • 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" เพื่อกรองตัวแปร ตั้งแต่จำนวนเต็มถูกต้องตามกฎหมายดังนั้นรหัสข้างต้นออกจะ:

ถ้าเราพยายามที่จะใช้ตัวแปรที่ไม่ใช่จำนวนเต็ม (เช่น "123abc") เป็นเอาท์พุท: "จำนวนเต็มไม่ถูกต้อง"

สำหรับรายการที่สมบูรณ์ของฟังก์ชั่นและตัวกรองเยี่ยมชม PHP คู่มือกรองอ้างอิง


การตรวจสอบและการฆ่าเชื้อ

มีสองชนิดของฟิลเตอร์คือ:

การตรวจสอบฟิลเตอร์:

  • ใช้ในการตรวจสอบผู้ใช้ป้อน
  • กฎระเบียบที่เข้มงวดรูปแบบ (เช่น URL หรือที่ E-Mail ตรวจสอบ)
  • หากประสบความสำเร็จชนิดตอบแทนที่คาดหวังถ้ามันล้มเหลวที่จะกลับเท็จ

ฆ่าเชื้อตัวกรอง:

  • มันใช้ในการอนุญาตหรือห้ามสตริงอักขระที่ระบุ
  • ไม่มีกฎรูปแบบข้อมูล
  • เสมอกลับสตริง

ตัวเลือกและธง

ตัวเลือกและธงที่ใช้ในการเพิ่มตัวเลือกเพิ่มเติมในการกรองฟิลเตอร์ที่ระบุ

ฟิลเตอร์ที่แตกต่างกันมีตัวเลือกที่แตกต่างกันและธง

ในตัวอย่างต่อไปนี้เราจะใช้ 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("是个合法的整数");
}
?>

เช่นโค้ดข้างต้นเป็นตัวเลือกที่เกี่ยวข้องจะต้องมีการวางไว้ในอาร์เรย์ที่เรียกว่า "ตัวเลือก" ใน ถ้าธงไม่จำเป็นต้องใช้ภายในอาร์เรย์

ตั้งแต่จำนวนเต็มคือ "300" มันไม่ได้อยู่ในช่วงที่ระบุเอาท์พุทของรหัสดังกล่าวข้างต้นจะได้รับ:

不是一个合法的整数

สำหรับรายการที่สมบูรณ์ของฟังก์ชั่นและตัวกรองเยี่ยมชม PHP คู่มือกรองอ้างอิง คุณสามารถดูตัวเลือกที่ใช้ได้สำหรับแต่ละตัวกรองและธง


การตรวจสอบการป้อนข้อมูล

ลองตรวจสอบข้อมูลจากแบบฟอร์ม

เราต้องทำสิ่งแรกคือการยืนยันว่าข้อมูลของท่านเรากำลังมองหา

จากนั้นเราจะใช้ filter_input () ฟังก์ชั่นในการกรองข้อมูลที่ป้อน

ในตัวอย่างด้านล่างที่ตัวแปร "อีเมล" จะถูกส่งผ่านไปยังหน้าของ PHP:

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

ตัวอย่างของผลลัพธ์ข้างต้นมีดังนี้

ตัวอย่างอธิบาย

ตัวอย่างข้างต้นมีตัวแปรจาก (อีเมล) "รับ" วิธีการของการถ่ายโอน:

  1. ตรวจสอบสถานะของ "อีเมล" ตัวแปร "รับ" ชนิด
  2. หากมีตัวแปรในการตรวจสอบไม่ว่าจะเป็นที่อยู่อีเมลที่ถูกต้อง

การป้อนข้อมูลการทำให้บริสุทธิ์

ลองให้ชัดเจนขึ้นมาจาก URL แบบฟอร์ม

ครั้งแรกของทั้งหมดที่เราต้องยืนยันว่าข้อมูลของท่านเรากำลังมองหา

แล้วเรา sanitize ข้อมูลเข้า filter_input () ฟังก์ชัน

ในตัวอย่างด้านล่างที่ตัวแปร "URL" จะถูกส่งผ่านไปยังหน้าของ PHP:

<?php
if(!filter_has_var(INPUT_GET, "url"))
{
	echo("没有 url 参数");
}
else
{
	$url = filter_input(INPUT_GET, 
	"url", FILTER_SANITIZE_URL);
	echo $url;
}
?>

ตัวอย่างอธิบาย

ตัวอย่างข้างต้นโดยตัวแปรหนึ่ง (URL) "ได้รับ" วิธีการส่ง:

  1. ตรวจสอบสถานะของ "URL" ตัวแปร "รับ" ชนิด
  2. ถ้าตัวแปรการป้อนข้อมูลที่มีอยู่ของตนให้บริสุทธิ์ (ลบอักขระที่ผิดกฎหมาย) และจะเก็บไว้ในตัวแปร $ URL ไป

ถ้าตัวแปรเป็นสตริงเช่นนี้ "http://www.ruaanoob.com/" ตัวแปร $ URL หลังจากที่บริสุทธิ์จะเป็นดังนี้:



ใหญ่ของกรองขาเข้า

รูปแบบที่มักจะประกอบด้วยช่องใส่หลาย เพื่อหลีกเลี่ยงการ filter_var หรือฟังก์ชั่นที่เรียกว่า filter_input ซ้ำ ๆ เราสามารถใช้ filter_var_array filter_input_array หรือฟังก์ชั่น

ในกรณีนี้เราจะใช้ filter_input_array () ฟังก์ชันการกรองสามตัวแปร GET ได้รับตัวแปรที่ได้รับคือชื่ออายุและที่อยู่ E-mail:

<?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("年龄必须在 1 到 120 之间。<br>");
}
elseif(!$result["email"])
{
	echo("E-Mail 不合法<br>");
}
else
{
	echo("输入正确");
}
?>

ตัวอย่างอธิบาย

ตัวอย่างข้างต้นมีตัวแปรสาม (ชื่ออายุและอีเมล) ส่งผ่าน "รับ" วิธีการ:

  1. ตั้งค่าอาร์เรย์ที่มีชื่อของตัวแปรที่ใช้ในการระบุตัวแปรและกรอง
  2. () ฟังก์ชั่นการป้อนพารามิเตอร์รวมทั้งตัวแปร GET และเพียงแค่ตั้ง filter_input_array อาร์เรย์โทร
  3. การตรวจสอบผล $ ตัวแปร "อายุ" และ "อีเมล" ตัวแปรเป็นสิ่งผิดกฎหมาย (หากมีการป้อนข้อมูลที่ผิดกฎหมายหลังการใช้งานฟังก์ชั่น filter_input_array () ตัวแปรเป็นเท็จ.)

filter_input_array () อาร์กิวเมนต์ที่สองฟังก์ชั่นที่สามารถอาร์เรย์หรือรหัสตัวกรอง

ถ้าพารามิเตอร์คือรหัสที่กรองแล้วกรองที่ระบุจะกรองทุกค่าอาร์เรย์การป้อนข้อมูล

ถ้าพารามิเตอร์นี้เป็นอาร์เรย์อาร์เรย์จะต้องปฏิบัติตามหลักเกณฑ์ดังต่อไปนี้:

  • ต้องเป็นอาเรย์ที่มีตัวแปรเป็นคีย์อาร์เรย์ (เช่น "อายุ" ตัวแปร)
  • ค่าของอาร์เรย์นี้จะต้องเป็น ID กรองหรือบทบัญญัติของตัวกรอง, ธงและตัวเลือกอาร์เรย์

โทรกลับใช้ตัวกรอง

โดยใช้ตัวกรอง FILTER_CALLBACK คุณสามารถเรียกฟังก์ชั่นที่กำหนดเองใช้มันเป็นตัวกรองที่จะใช้ ดังนั้นเราจึงมีการควบคุมที่สมบูรณ์มากกว่าการกรองข้อมูล

คุณสามารถสร้างฟังก์ชั่นของคุณเองหรือคุณสามารถใช้ฟังก์ชั่นที่มีอยู่ PHP

คุณจะพร้อมที่จะใช้ฟังก์ชั่นกรองตามบทบัญญัติที่ระบุวิธีการที่กำหนดไว้ตัวเลือก ในอาเรย์ที่มีชื่อ "ตัวเลือก"

ในตัวอย่างต่อไปนี้เราจะใช้ฟังก์ชั่นที่กำหนดเองของทุกคน "_" แปลงเป็นช่องว่าง:

<?php
function convertSpace($string)
{
	return str_replace("_", ".", $string);
}

$string = "www_w3big_com!";

echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>

ผลมาจากโค้ดข้างต้นดังต่อไปนี้:

ตัวอย่างอธิบาย

ตัวอย่างข้างต้นทั้งหมด "_" เป็น "".

  1. ที่จะสร้าง "_" จะถูกแทนที่ด้วย "." ฟังก์ชั่น
  2. filter_var () ฟังก์ชั่นการโทรซึ่งพารามิเตอร์กรอง FILTER_CALLBACK และอาเรย์ที่มีฟังก์ชั่นของเรา