跳到主要内容

เนื้อหาภาษาไทย / 泰语内容

系统指南 内容已审核

Data Sanitization: การทำความสะอาดข้อมูลด้วย filter_var()

บทความนี้กล่าวถึงความสำคัญของการทำความสะอาดข้อมูล (Data Sanitization) เพื่อกำจัดข้อมูลที่ไม่พึงประสงค์หรือเป็นอันตราย โดยเน้นการใช้งานฟังก์ชัน `filter_var()` ใน...

Data Sanitization: การทำความสะอาดข้อมูลด้วย filter_var()

จากบทที่แล้ว เราได้เรียนรู้เกี่ยวกับการตรวจสอบข้อมูล (Data Validation) เพื่อให้มั่นใจว่าข้อมูลที่รับเข้ามานั้นถูกต้องตามที่เราต้องการ ในบทนี้ เราจะมาเรียนรู้เกี่ยวกับการทำความสะอาดข้อมูล (Data Sanitization) เพื่อกำจัดข้อมูลที่ไม่พึงประสงค์หรือเป็นอันตรายออกไปก่อนที่จะนำไปใช้งานหรือจัดเก็บ

การทำความสะอาดข้อมูลมีความสำคัญอย่างยิ่ง โดยเฉพาะข้อมูลที่รับมาจากผู้ใช้ (User Input) เนื่องจากอาจมีข้อมูลที่เป็นอันตราย เช่น Code HTML หรือ Javascript ที่สามารถนำไปใช้ในการโจมตีเว็บไซต์ของเราได้ (Cross-Site Scripting - XSS)

ฟังก์ชัน filter_var() คืออะไร?

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

ในบทนี้ เราจะเน้นไปที่การใช้งาน filter_var() ในการทำความสะอาดข้อมูล โดยจะครอบคลุมตัวกรองที่ใช้บ่อย 3 ตัว ได้แก่ FILTER_SANITIZE_STRING, FILTER_SANITIZE_EMAIL และ FILTER_SANITIZE_NUMBER_INT

FILTER_SANITIZE_STRING: ทำความสะอาดข้อมูลประเภทข้อความ

FILTER_SANITIZE_STRING เป็นตัวกรองที่ใช้สำหรับทำความสะอาดข้อมูลประเภทข้อความ โดยจะทำการลบแท็ก HTML, ลบหรือเข้ารหัสอักขระพิเศษ และตัดช่องว่าง (Whitespace) ที่ไม่จำเป็นออกไป

ข้อควรระวัง: FILTER_SANITIZE_STRING ใน PHP เวอร์ชั่น 7.3 และต่ำกว่า มีช่องโหว่ด้านความปลอดภัย ทำให้ไม่แนะนำให้ใช้ ใน PHP 8.0 ได้ถูกยกเลิกไปแล้ว ดังนั้นควรใช้ตัวเลือกอื่นที่ปลอดภัยกว่า เช่น htmlspecialchars() หรือ strip_tags() ร่วมกับ trim()

เนื่องจากข้อจำกัดข้างต้น เราจะแสดงตัวอย่างการใช้งาน htmlspecialchars() และ trim() แทน:

<?php

$input = "<p>Hello <script>alert('XSS');</script>  World!</p>";

// ใช้ htmlspecialchars() เพื่อแปลงแท็ก HTML เป็น HTML entities
$sanitized_data = htmlspecialchars(trim($input), ENT_QUOTES, 'UTF-8');

echo "Original Data: " . $input . "<br>";
echo "Sanitized Data: " . $sanitized_data . "<br>";

?>

ผลลัพธ์:

Original Data: <p>Hello <script>alert('XSS');</script>  World!</p><br>
Sanitized Data: &lt;p&gt;Hello &lt;script&gt;alert('XSS');&lt;/script&gt; World!&lt;/p&gt;<br>

ในตัวอย่างนี้ htmlspecialchars() จะแปลง < เป็น &lt;, > เป็น &gt;, " เป็น &quot; และ ' เป็น &#039; ซึ่งจะช่วยป้องกันการโจมตี XSS ได้

trim() จะช่วยตัดช่องว่างด้านหน้าและด้านหลังข้อความออกไป

FILTER_SANITIZE_EMAIL: ทำความสะอาดข้อมูลประเภทอีเมล

FILTER_SANITIZE_EMAIL เป็นตัวกรองที่ใช้สำหรับทำความสะอาดข้อมูลประเภทอีเมล โดยจะทำการลบอักขระที่ไม่ถูกต้องตามรูปแบบอีเมลออกไป

<?php

$email = "invalid.email@example..com";

$sanitized_email = filter_var($email, FILTER_SANITIZE_EMAIL);

echo "Original Email: " . $email . "<br>";
echo "Sanitized Email: " . $sanitized_email . "<br>";

?>

ผลลัพธ์:

Original Email: invalid.email@example..com<br>
Sanitized Email: invalid.email@example.com<br>

ในตัวอย่างนี้ FILTER_SANITIZE_EMAIL จะลบ . ที่ซ้ำกันออกไป เพื่อให้ได้อีเมลที่ถูกต้องตามรูปแบบมากขึ้น

ข้อควรระวัง: FILTER_SANITIZE_EMAIL ไม่ได้การันตีว่าอีเมลที่ได้นั้นถูกต้องตามรูปแบบ 100% แต่ช่วยลดโอกาสที่จะเกิดข้อผิดพลาดได้

FILTER_SANITIZE_NUMBER_INT: ทำความสะอาดข้อมูลประเภทจำนวนเต็ม

FILTER_SANITIZE_NUMBER_INT เป็นตัวกรองที่ใช้สำหรับทำความสะอาดข้อมูลประเภทจำนวนเต็ม โดยจะทำการลบอักขระที่ไม่ใช่ตัวเลข, เครื่องหมายบวก (+) และเครื่องหมายลบ (-) ออกไป

<?php

$number = "+123-456abc789";

$sanitized_number = filter_var($number, FILTER_SANITIZE_NUMBER_INT);

echo "Original Number: " . $number . "<br>";
echo "Sanitized Number: " . $sanitized_number . "<br>";

?>

ผลลัพธ์:

Original Number: +123-456abc789<br>
Sanitized Number: +123-456789<br>

ในตัวอย่างนี้ FILTER_SANITIZE_NUMBER_INT จะลบตัวอักษร abc ออกไป เพื่อให้เหลือเพียงตัวเลข เครื่องหมายบวก และเครื่องหมายลบ

ข้อควรระวัง: FILTER_SANITIZE_NUMBER_INT จะเก็บเครื่องหมายบวกและลบไว้ด้วย หากต้องการให้เป็นจำนวนเต็มบวกเท่านั้น อาจจะต้องใช้ฟังก์ชันเพิ่มเติม เช่น abs()

สรุป

การทำความสะอาดข้อมูล (Data Sanitization) เป็นขั้นตอนสำคัญในการพัฒนาเว็บไซต์และแอปพลิเคชัน เพื่อป้องกันข้อมูลที่ไม่พึงประสงค์และอันตรายจากการเข้ามาในระบบ filter_var() เป็นเครื่องมือที่มีประโยชน์ในการทำความสะอาดข้อมูลประเภทต่างๆ แต่ควรเลือกใช้ตัวกรองที่เหมาะสมและระมัดระวังในการใช้งาน เพื่อให้ได้ผลลัพธ์ที่ถูกต้องและปลอดภัย

ในบทต่อไป เราจะมาเรียนรู้เกี่ยวกับการป้องกัน SQL Injection ซึ่งเป็นภัยคุกคามที่ร้ายแรงต่อฐานข้อมูลของเรา

Office.in.th Custom Service

想基于此结构开发或定制系统?

Office.in.th 承接企业级 Web Application、API Integration 以及政府/企业管理系统的设计与开发,并提供长期支持。

查看软件开发服务