วันพฤหัสบดีที่ 13 มีนาคม พ.ศ. 2568

[PHP] วิธีใช้ filter_var() กรองข้อมูล Input อย่างปลอดภัย

ในการเขียนโปรแกรม PHP หนึ่งในเรื่องสำคัญที่เราต้องคำนึงถึงเสมอก็คือ ความปลอดภัยของข้อมูลที่รับเข้ามา (Input Validation) เพราะหากเราปล่อยให้ผู้ใช้ส่งข้อมูลเข้ามาโดยไม่มีการกรอง (Filtering) หรือการตรวจสอบความถูกต้อง (Validation) ก็อาจเปิดช่องให้เกิดช่องโหว่ทางด้านความปลอดภัย เช่น SQL Injection, XSS (Cross-Site Scripting), หรือข้อมูลที่ผิดพลาด ได้

โชคดีที่ PHP มีฟังก์ชันที่ช่วยให้เราสามารถกรองข้อมูล Input ได้ง่าย ๆ และมีประสิทธิภาพ นั่นก็คือ filter_var() วันนี้เราจะมาดูกันว่า filter_var() คืออะไร และใช้งานอย่างไรให้ปลอดภัย!

1. filter_var() คืออะไร?

filter_var() เป็นฟังก์ชันที่ใช้ในการกรองและตรวจสอบข้อมูล Input โดยเราสามารถใช้มันร่วมกับ Filter ที่มีอยู่แล้วใน PHP เพื่อทำให้แน่ใจว่าข้อมูลที่รับมานั้นอยู่ในรูปแบบที่ถูกต้อง

รูปแบบการใช้งาน

filter_var(ค่า, ตัวกรอง [, ตัวเลือกเสริม])

  • ค่า (Value): ข้อมูลที่ต้องการตรวจสอบหรือกรอง
  • ตัวกรอง (Filter): ประเภทของการกรองที่ต้องการใช้ เช่น กรองเป็นอีเมล, URL, ตัวเลข ฯลฯ
  • ตัวเลือกเสริม (Options) [ไม่จำเป็น]: ใช้กำหนดเงื่อนไขเพิ่มเติมในการกรอง


2. ตัวกรองที่ใช้งานบ่อย

PHP มีตัวกรองที่ใช้กับ filter_var() อยู่หลายประเภท ซึ่งตัวที่นิยมใช้ ได้แก่:

2.1 กรองข้อมูลประเภทตัวเลข

ตรวจสอบว่าเป็นตัวเลขหรือไม่ (FILTER_VALIDATE_INT)

$number = "123";
if (filter_var($number, FILTER_VALIDATE_INT) !== false) {
    echo "เป็นตัวเลขที่ถูกต้อง";
} else {
    echo "ไม่ใช่ตัวเลข";
}

ตรวจสอบว่าเป็นตัวเลขทศนิยมหรือไม่ (FILTER_VALIDATE_FLOAT)

$float = "12.34";
if (filter_var($float, FILTER_VALIDATE_FLOAT) !== false) {
    echo "เป็นตัวเลขทศนิยมที่ถูกต้อง";
} else {
    echo "ไม่ใช่ตัวเลขทศนิยม";
}

2.2 กรองข้อมูลประเภทสตริง (String)

ลบอักขระที่ไม่จำเป็นออกจากข้อความ (FILTER_SANITIZE_STRING)

$input = "<h1>Hello, World!</h1>";
$clean = filter_var($input, FILTER_SANITIZE_STRING);
echo $clean; // Output: Hello, World!

หมายเหตุ: ตั้งแต่ PHP 8.1 FILTER_SANITIZE_STRING ถูกถอดออกไปแล้ว แนะนำให้ใช้ strip_tags() แทน

2.3 ตรวจสอบและกรองอีเมล

ตรวจสอบว่าเป็นอีเมลที่ถูกต้อง (FILTER_VALIDATE_EMAIL)

$email = "example@gmail.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "อีเมลถูกต้อง";
} else {
    echo "อีเมลไม่ถูกต้อง";
}

กรองอีเมลให้สะอาด (FILTER_SANITIZE_EMAIL)

$dirty_email = "ex@am!ple@@gmail.com";
$clean_email = filter_var($dirty_email, FILTER_SANITIZE_EMAIL);
echo $clean_email; // Output: example@gmail.com

2.4 ตรวจสอบและกรอง URL

ตรวจสอบว่าเป็น URL ที่ถูกต้อง (FILTER_VALIDATE_URL)

$url = "https://www.example.com";
if (filter_var($url, FILTER_VALIDATE_URL)) {
    echo "URL ถูกต้อง";
} else {
    echo "URL ไม่ถูกต้อง";
}

กรอง URL ให้สะอาด (FILTER_SANITIZE_URL)

$dirty_url = "https://www.ex@ampl!!e.com";
$clean_url = filter_var($dirty_url, FILTER_SANITIZE_URL);
echo $clean_url; // Output: https://www.example.com

2.5 ตรวจสอบและกรอง IP Address

ตรวจสอบว่าเป็น IPv4 หรือ IPv6 (FILTER_VALIDATE_IP)

$ip = "192.168.1.1";
if (filter_var($ip, FILTER_VALIDATE_IP)) {
    echo "IP Address ถูกต้อง";
} else {
    echo "IP Address ไม่ถูกต้อง";
}

3. ใช้ filter_var() ร่วมกับตัวเลือกเพิ่มเติม (Options)

บางกรณีเราต้องการกำหนดเงื่อนไขเพิ่มเติมให้กับ filter_var() เช่น กำหนดช่วงค่าของตัวเลข เป็นต้น

ตัวอย่างการกำหนดช่วงค่าด้วย FILTER_VALIDATE_INT

$options = array("options" => array("min_range" => 1, "max_range" => 100));
$number = 50;
if (filter_var($number, FILTER_VALIDATE_INT, $options)) {
    echo "ตัวเลขอยู่ในช่วงที่กำหนด";
} else {
    echo "ตัวเลขอยู่นอกช่วงที่กำหนด";
}

4. ใช้ filter_var() ในการกรองข้อมูล Form Input

$name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
$age = filter_var($_POST['age'], FILTER_VALIDATE_INT, array("options" => array("min_range" => 1)));

if ($name && $email && $age) {
    echo "ข้อมูลถูกต้อง!";
} else {
    echo "กรุณากรอกข้อมูลให้ถูกต้อง";
}

สรุป

  • filter_var() เป็นฟังก์ชันที่ใช้ในการกรองและตรวจสอบข้อมูล Input ได้ง่ายและปลอดภัย
  • มีตัวกรอง (Filter) ให้ใช้มากมาย เช่น ตรวจสอบอีเมล, URL, หมายเลข IP, ตัวเลข ฯลฯ
  • ใช้ FILTER_SANITIZE_ เพื่อล้างข้อมูลให้สะอาดก่อนนำไปใช้
  • ใช้ FILTER_VALIDATE_ เพื่อตรวจสอบว่าข้อมูลอยู่ในรูปแบบที่ถูกต้องหรือไม่
  • สามารถใช้ร่วมกับ Options เพื่อกำหนดเงื่อนไขเพิ่มเติม

การใช้ filter_var() จะช่วยให้โปรแกรมของคุณปลอดภัยขึ้น และลดความเสี่ยงจากข้อมูลที่ไม่พึงประสงค์ อย่าลืมใช้มันทุกครั้งที่รับ Input จากผู้ใช้!

ไม่มีความคิดเห็น:

แสดงความคิดเห็น