PlusMagi's Blog By Pitt Phunsanit Backend,Cybersecurity PHP: การจำกัดสิทธิ์โฟลเดอร์และไฟล์บน Server (Permissions)

PHP: การจำกัดสิทธิ์โฟลเดอร์และไฟล์บน Server (Permissions)

ในฐานะนักพัฒนาระดับ Senior การจัดการสิทธิ์การเข้าถึง (File Permissions) ไม่ใช่แค่การตั้งค่าบน Server แต่คือรากฐานที่สำคัญที่สุดของความมั่นคงปลอดภัย (Security Foundation) ของแอปพลิเคชัน PHP ทุกตัว การกำหนดสิทธิ์ที่ถูกต้องจะช่วยป้องกันการเข้าถึงข้อมูลโดยไม่ได้รับอนุญาต (Unauthorized Access) และลดความเสี่ยงจากการโจมตีประเภท Privilege Escalation

⚙️ หลักการพื้นฐานของระบบสิทธิ์ (The Core Concept)

ระบบปฏิบัติการส่วนใหญ่ที่ใช้กับ Web Server (เช่น Linux/Unix) ใช้ระบบสิทธิ์ที่แบ่งออกเป็น 3 กลุ่มหลัก คือ Owner (เจ้าของไฟล์), Group (กลุ่มที่เกี่ยวข้อง), และ Other (ผู้ใช้รายอื่น) แต่ละกลุ่มจะได้รับชุดสิทธิ์ที่แตกต่างกัน ซึ่งประกอบด้วย:

  • r (Read): สิทธิ์ในการอ่านเนื้อหาของไฟล์หรือรายชื่อในโฟลเดอร์
  • w (Write): สิทธิ์ในการเขียน แก้ไข หรือลบไฟล์/สร้างไฟล์ใหม่ในโฟลเดอร์
  • x (Execute): สิทธิ์ในการประมวลผลไฟล์ (สำหรับสคริปต์) หรือสิทธิ์ในการเข้าถึง (Traversal) โฟลเดอร์

PHP จะทำงานภายใต้ User Account ของ Web Server (เช่น www-data หรือ apache) ดังนั้น การกำหนดสิทธิ์จึงต้องมั่นใจว่า User นี้มีอำนาจเพียงพอที่จะทำงานที่จำเป็นเท่านั้น (Principle of Least Privilege)

🛡️ การจัดการสิทธิ์ด้วย PHP: ฟังก์ชัน chmod()

ใน PHP เราใช้ฟังก์ชัน chmod() เพื่อเรียกใช้คำสั่งระดับระบบปฏิบัติการ (OS Level) เพื่อแก้ไขสิทธิ์จริงบนดิสก์ การใช้ฟังก์ชันนี้อย่างถูกต้องจึงเป็นสิ่งสำคัญอย่างยิ่งในการรักษาความปลอดภัยของระบบ

รูปแบบการใช้งานและค่า Octal Code

chmod() รับพารามิเตอร์เป็นพาธของไฟล์/โฟลเดอร์ และค่าสิทธิ์ในรูปแบบ Octal Code (ตัวเลขฐานแปด) ซึ่งเป็นวิธีที่นักพัฒนามืออาชีพใช้เพื่อความแม่นยำ:

PHP

// ตัวอย่าง: ตั้งค่าสิทธิ์ให้ไฟล์เป็น 644 (Owner: rw-, Group: r--, Other: r--)

PHP

chmod("/var/www/html/config.php", 0644);

คำอธิบาย:
0644 หมายถึง Owner มีสิทธิ์อ่านและเขียน (6) ส่วน Group และ Other มีสิทธิ์อ่านเท่านั้น (4) ซึ่งเป็นมาตรฐานความปลอดภัยสำหรับไฟล์คอนฟิกูเรชัน

PHP

// ตัวอย่าง: ตั้งค่าสิทธิ์ให้โฟลเดอร์เป็น 755 (Owner: rwx, Group: r-x, Other: r-x)

PHP

chmod("/var/www/html/uploads", 0755);

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

💡 บทสรุป: แนวทางปฏิบัติที่ดีที่สุด (Best Practices)

ในการพัฒนาแอปพลิเคชันระดับองค์กร ควรปฏิบัติตามหลักการเหล่านี้เสมอ:

  1. ใช้ 0644 สำหรับไฟล์: จำกัดสิทธิ์การเขียนเฉพาะเจ้าของเท่านั้น
  2. ใช้ 0755 สำหรับโฟลเดอร์: อนุญาตให้ทุกคนเข้าถึงได้ แต่จำกัดการเขียนเฉพาะเจ้าของ
  3. ตรวจสอบสิทธิ์เสมอ: ควรมีโค้ดตรวจสอบสิทธิ์ก่อนการดำเนินการสำคัญ เช่น การอัปโหลดไฟล์ หรือการเขียนฐานข้อมูล เพื่อป้องกันข้อผิดพลาดที่เกิดจากสิทธิ์ที่ไม่เพียงพอ

การเข้าใจและควบคุมสิทธิ์เหล่านี้อย่างเชี่ยวชาญคือการยกระดับความมั่นคงปลอดภัยของโค้ด PHP ของคุณให้ทัดเทียมกับระดับ Senior Architect อย่างแท้จริง

Exit mobile version