メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

Validating User Input

บทความนี้กล่าวถึงความสำคัญของการตรวจสอบความถูกต้องของข้อมูลที่ผู้ใช้ป้อน เพื่อให้มั่นใจในความถูกต้อง, ความปลอดภัย และประสบการณ์ที่ดีของผู้ใช้ โดยนำเสนอวิธีการตร...

การตรวจสอบความถูกต้องของข้อมูลที่ผู้ใช้ป้อน (Validating User Input)

ในโลกของการพัฒนาเว็บแอปพลิเคชัน การรับข้อมูลจากผู้ใช้เป็นสิ่งที่หลีกเลี่ยงไม่ได้ ไม่ว่าจะเป็นการกรอกข้อมูลในฟอร์มสมัครสมาชิก, การแสดงความคิดเห็น, หรือการค้นหาข้อมูล การตรวจสอบความถูกต้องของข้อมูล (Validating User Input) ที่ผู้ใช้ป้อนเข้ามาจึงเป็นขั้นตอนที่สำคัญอย่างยิ่ง เพื่อให้มั่นใจว่าข้อมูลที่ได้รับนั้นถูกต้อง, ครบถ้วน, และอยู่ในรูปแบบที่คาดหวัง การละเลยขั้นตอนนี้อาจนำไปสู่ปัญหาต่างๆ เช่น ข้อมูลที่ไม่ถูกต้องในฐานข้อมูล, ช่องโหว่ด้านความปลอดภัย (เช่น SQL Injection), หรือแม้แต่การทำงานผิดพลาดของแอปพลิเคชัน

บทความนี้จะพาคุณไปทำความเข้าใจเกี่ยวกับการตรวจสอบความถูกต้องของข้อมูลที่ผู้ใช้ป้อนใน PHP โดยเน้นที่การใช้ฟังก์ชัน filter_var(), การทำ Sanitization, และการสร้าง Custom Validation Rules

ทำไมต้องตรวจสอบความถูกต้องของข้อมูล?

ก่อนที่จะลงลึกในรายละเอียดทางเทคนิค เรามาดูกันก่อนว่าทำไมการตรวจสอบความถูกต้องของข้อมูลจึงมีความสำคัญ:

  • ความถูกต้องของข้อมูล: ข้อมูลที่ถูกต้องจะช่วยให้แอปพลิเคชันทำงานได้อย่างถูกต้องและให้ผลลัพธ์ที่แม่นยำ
  • ความปลอดภัย: การตรวจสอบข้อมูลช่วยป้องกันการโจมตีต่างๆ เช่น SQL Injection, Cross-Site Scripting (XSS) และการโจมตีอื่นๆ ที่อาศัยข้อมูลที่ไม่ถูกต้อง
  • ประสบการณ์ผู้ใช้ที่ดี: การให้คำแนะนำที่ชัดเจนแก่ผู้ใช้เกี่ยวกับข้อผิดพลาดในการป้อนข้อมูลจะช่วยปรับปรุงประสบการณ์ผู้ใช้โดยรวม
  • ความสมบูรณ์ของฐานข้อมูล: การตรวจสอบข้อมูลก่อนบันทึกลงในฐานข้อมูลจะช่วยรักษาความสมบูรณ์ของข้อมูล

การใช้ filter_var()

filter_var() เป็นฟังก์ชัน PHP ที่มีประสิทธิภาพในการตรวจสอบและกรองข้อมูล (Sanitize) โดยฟังก์ชันนี้รับค่าข้อมูลและ filter ที่ต้องการใช้เป็น arguments และคืนค่าข้อมูลที่ผ่านการกรองแล้ว หรือ FALSE หากการกรองล้มเหลว

<?php

$email = "test@example.com";

// ตรวจสอบว่าเป็นอีเมลที่ถูกต้องหรือไม่
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
  echo "$email is a valid email address";
} else {
  echo "$email is not a valid email address";
}

?>

ในตัวอย่างข้างต้น เราใช้ FILTER_VALIDATE_EMAIL เพื่อตรวจสอบว่า $email เป็นอีเมลที่ถูกต้องหรือไม่ filter_var() มี filters ให้เลือกใช้อีกมากมาย เช่น:

  • FILTER_VALIDATE_BOOLEAN: ตรวจสอบว่าเป็นค่า boolean หรือไม่
  • FILTER_VALIDATE_INT: ตรวจสอบว่าเป็น integer หรือไม่
  • FILTER_VALIDATE_FLOAT: ตรวจสอบว่าเป็น float หรือไม่
  • FILTER_VALIDATE_URL: ตรวจสอบว่าเป็น URL ที่ถูกต้องหรือไม่
  • FILTER_VALIDATE_IP: ตรวจสอบว่าเป็น IP address ที่ถูกต้องหรือไม่
  • FILTER_SANITIZE_EMAIL: ลบตัวอักษรที่ไม่ถูกต้องออกจากอีเมล
  • FILTER_SANITIZE_URL: ลบตัวอักษรที่ไม่ถูกต้องออกจาก URL
  • FILTER_SANITIZE_STRING: ลบแท็ก HTML และเข้ารหัสตัวอักษรพิเศษ (ควรใช้ด้วยความระมัดระวัง)

Trade-offs: การใช้ FILTER_SANITIZE_STRING อาจดูเหมือนเป็นวิธีที่ง่ายในการป้องกัน XSS แต่ควรใช้ด้วยความระมัดระวัง เนื่องจากอาจลบข้อมูลที่ถูกต้องออกไปด้วย ทางเลือกที่ดีกว่าคือการใช้ฟังก์ชันเฉพาะเจาะจงในการเข้ารหัสข้อมูลเมื่อแสดงผล (เช่น htmlspecialchars()) แทนที่จะพยายามลบข้อมูลที่ไม่ต้องการออกตั้งแต่แรก

Sanitization

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

<?php

$comment = "<p>This is a comment with some HTML.</p>";

// ลบแท็ก HTML
$sanitized_comment = strip_tags($comment);

echo $sanitized_comment; // Output: This is a comment with some HTML.

?>

ฟังก์ชัน strip_tags() เป็นวิธีหนึ่งในการทำ Sanitization โดยจะลบแท็ก HTML ออกจากข้อความ อย่างไรก็ตาม ควรพิจารณาว่าข้อมูลประเภทใดที่คุณต้องการอนุญาตและข้อมูลประเภทใดที่คุณต้องการลบออก

แนวปฏิบัติที่ดี: แทนที่จะลบข้อมูลที่ไม่ต้องการออกทั้งหมด ให้พิจารณาเข้ารหัสข้อมูลเมื่อแสดงผล ตัวอย่างเช่น การใช้ htmlspecialchars() เพื่อเข้ารหัสตัวอักษรพิเศษ เช่น <, >, &, ", และ ' ซึ่งจะช่วยป้องกัน XSS ได้อย่างมีประสิทธิภาพ

การสร้าง Custom Validation Rules

ในบางกรณี Filters ที่มีมาให้ใน filter_var() อาจไม่เพียงพอต่อความต้องการของคุณ คุณสามารถสร้าง Custom Validation Rules ได้เอง โดยใช้ Regular Expressions หรือฟังก์ชัน PHP อื่นๆ

<?php

function validate_username($username) {
  // ตรวจสอบว่า username มีความยาวระหว่าง 3 ถึง 20 ตัวอักษร
  // และประกอบด้วยตัวอักษรภาษาอังกฤษ ตัวเลข และเครื่องหมาย _ เท่านั้น
  if (preg_match('/^[a-zA-Z0-9_]{3,20}$/', $username)) {
    return true;
  } else {
    return false;
  }
}

$username = "john_doe123";

if (validate_username($username)) {
  echo "$username is a valid username";
} else {
  echo "$username is not a valid username";
}

?>

ในตัวอย่างนี้ เราสร้างฟังก์ชัน validate_username() เพื่อตรวจสอบว่า username ตรงตามเงื่อนไขที่กำหนดหรือไม่ โดยใช้ Regular Expression /^[a-zA-Z0-9_]{3,20}$/ ซึ่งหมายถึง:

  • ^: เริ่มต้นสตริง
  • [a-zA-Z0-9_]: ตัวอักษรภาษาอังกฤษ ตัวเลข หรือเครื่องหมาย _
  • {3,20}: ความยาวระหว่าง 3 ถึง 20 ตัวอักษร
  • $: สิ้นสุดสตริง

แนวคิดเชิงระบบ: การสร้าง Custom Validation Rules ช่วยให้คุณสามารถปรับแต่งการตรวจสอบข้อมูลให้ตรงกับความต้องการของแอปพลิเคชันของคุณได้อย่างแม่นยำ นอกจากนี้ การแยก Validation Rules ออกเป็นฟังก์ชันต่างๆ จะช่วยให้โค้ดของคุณอ่านง่ายขึ้นและง่ายต่อการบำรุงรักษา

สรุป

การตรวจสอบความถูกต้องของข้อมูลที่ผู้ใช้ป้อนเป็นขั้นตอนที่สำคัญในการพัฒนาเว็บแอปพลิเคชันที่ปลอดภัยและเชื่อถือได้ การใช้ filter_var(), การทำ Sanitization, และการสร้าง Custom Validation Rules เป็นเครื่องมือที่มีประสิทธิภาพในการบรรลุเป้าหมายนี้ อย่าลืมพิจารณา Trade-offs และแนวปฏิบัติที่ดีในการเลือกวิธีการตรวจสอบข้อมูลที่เหมาะสมกับความต้องการของแอปพลิเคชันของคุณ

ในบทความถัดไป เราจะพูดถึงการจัดการ File Uploads ซึ่งเป็นอีกหนึ่งหัวข้อที่เกี่ยวข้องกับการรับข้อมูลจากผู้ใช้

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る