Input validation ซึ่งหมายถึงการตรวจสอบว่า input ของผู้ใช้ตรงตามเกณฑ์ที่คาดหวังก่อนนำไปประมวลผล เป็นแนวปฏิบัติด้านความปลอดภัยพื้นฐาน เนื่องจากการโจมตีมักมาผ่าน input ที่เป็นอันตราย การตรวจสอบ (และทำความสะอาด) input ช่วยป้องกันช่องโหว่มากมาย หลักการสำคัญคือ อย่าเชื่อ input ของผู้ใช้
อย่าเชื่อ input ของผู้ใช้
ALL input from outside (users, APIs, files, requests) is UNTRUSTED — it can be malicious:
→ attackers send crafted input to exploit vulnerabilities (injection, XSS, etc.)
→ "never trust the client" — input can be anything, including attacks
→ Validate and handle ALL external input as potentially hostile.
input validation ทำอะไร
VALIDATION → check input meets expected criteria; reject what doesn't:
→ TYPE (is it a number?), FORMAT (valid email?), RANGE (0-120?), LENGTH (max?),
allowed values (whitelist), required fields
→ PREFER ALLOWLISTING (accept known-good) over blocklisting (reject known-bad —
incomplete; attackers find bypasses)
→ reject/handle invalid input safely (don't process it)
การตรวจสอบและความปลอดภัย (defense in depth)
✓ Helps prevent INJECTION attacks, malformed-data exploits, buffer issues, logic abuse
⚠️ But validation ALONE isn't enough — use CONTEXT-SPECIFIC defenses too:
→ SQL → parameterized queries (not just validation)
→ output to HTML → escaping (prevents XSS) — validation isn't a substitute
→ Input validation is one LAYER (defense in depth), not the only defense.
✓ Validate on the SERVER (client-side validation is for UX only — easily bypassed)
ทำไมจึงสำคัญ
การเข้าใจว่าทำไม input validation จึงสำคัญต่อความปลอดภัยเป็นเรื่องพื้นฐาน เพราะ การโจมตีมักมาผ่าน input ที่เป็นอันตราย และหลักการที่ว่าอย่าเชื่อ input ของผู้ใช้เป็นรากฐานของการเขียนโค้ดอย่างปลอดภัยส่วนใหญ่ จึงเป็นความรู้ด้านความปลอดภัยที่จำเป็น
หลักการสำคัญ อย่าเชื่อ input ของผู้ใช้ (input ทั้งหมดจากภายนอกไม่น่าเชื่อถือและอาจเป็นอันตราย เพราะผู้โจมตีส่ง input ที่ออกแบบมาเพื่อใช้ประโยชน์จากช่องโหว่) เป็นพื้นฐานของการคิดเรื่องความปลอดภัยและนำไปใช้ได้กว้าง
การเข้าใจ ว่า input validation ทำอะไร (การตรวจสอบว่า input ตรงตามเกณฑ์ที่คาดหวัง ทั้ง type, format, range, length, ค่าที่อนุญาต และปฏิเสธสิ่งที่ไม่ตรง โดยเลือกใช้ allowlisting สิ่งที่รู้ว่าดี มากกว่า blocklisting สิ่งที่รู้ว่าไม่ดีซึ่งไม่สมบูรณ์) เป็นกลไกในทางปฏิบัติสำหรับการจัดการ input ที่ไม่น่าเชื่อถืออย่างปลอดภัย
การเข้าใจ บทบาทของการตรวจสอบใน defense in depth เป็นเรื่องสำคัญและมีความละเอียดอ่อน: การตรวจสอบช่วยป้องกันการโจมตีแบบ injection และการใช้ประโยชน์จากข้อมูลที่ผิดรูปแบบ แต่ การตรวจสอบเพียงอย่างเดียวไม่เพียงพอ ยังต้องการการป้องกันเฉพาะบริบทด้วย (parameterized queries สำหรับ SQL การ escape output สำหรับ XSS การตรวจสอบไม่ได้ใช้แทนสิ่งเหล่านี้)
ดังนั้น input validation จึงเป็น หนึ่งชั้น จากหลายชั้น ไม่ใช่การป้องกันเดียว ซึ่งเป็นความแตกต่างสำคัญที่ป้องกันการพึ่งพาการตรวจสอบมากเกินไป
ที่สำคัญ การเข้าใจว่าการตรวจสอบต้องเกิดขึ้นบน เซิร์ฟเวอร์ (การตรวจสอบฝั่ง client มีไว้เพื่อ UX เท่านั้นและถูกหลีกเลี่ยงได้ง่าย ซึ่งการพึ่งพามันเป็นข้อผิดพลาดด้านความปลอดภัยที่พบบ่อย) เป็นเรื่องจำเป็น
เนื่องจากการโจมตีมักมาผ่าน input ที่เป็นอันตรายและหลักการอย่าเชื่อ input เป็นรากฐานของการเขียนโค้ดอย่างปลอดภัย และเนื่องจาก input validation (ทำบนเซิร์ฟเวอร์ ในฐานะหนึ่งชั้นของ defense in depth ควบคู่กับการป้องกันเฉพาะบริบท) ช่วยป้องกันช่องโหว่มากมาย และเนื่องจากการเข้าใจบทบาทและข้อจำกัดของมันจำเป็นสำหรับการพัฒนาอย่างปลอดภัย การเข้าใจว่าทำไม input validation จึงสำคัญจึงเป็นความรู้ด้านความปลอดภัยพื้นฐานที่จำเป็น สื่อถึงหลักการอย่าเชื่อ input ที่เป็นพื้นฐาน เป็นชั้นหลักของการป้องกัน และเป็นความเข้าใจที่จำเป็น (รวมถึงการใช้บนเซิร์ฟเวอร์อย่างเหมาะสมและตำแหน่งของมันภายใน defense in depth) สำหรับการสร้างซอฟต์แวร์ที่ปลอดภัย
