Kitti

View My GitHub Profile

12.4.1 File Storage

Verify that files obtained from untrusted sources are stored outside the web root, with limited permissions.

ChatGPT : การจัดเก็บไฟล์จากแหล่งที่ไม่น่าเชื่อถือ (Untrusted Sources) เป็นประเด็นสำคัญด้านความปลอดภัยของระบบ โดยเฉพาะเว็บแอปพลิเคชันที่อนุญาตให้ผู้ใช้ อัปโหลดไฟล์ เช่น รูปภาพ เอกสาร หรือไฟล์อื่นๆ ซึ่งหากไม่มีมาตรการรักษาความปลอดภัยที่ดี อาจเปิดช่องให้เกิด การโจมตีทางไซเบอร์ เช่น Remote Code Execution (RCE), File Inclusion Attacks และอื่นๆ

  1. ทำไมต้องจัดเก็บไฟล์จากแหล่งไม่น่าเชื่อถือนอก Web Root? Web Root คืออะไร?

Web Root คือไดเรกทอรีที่เว็บเซิร์ฟเวอร์ใช้ให้บริการไฟล์ เช่น /var/www/html/ (สำหรับ Apache บน Linux) หรือ C:\inetpub\wwwroot\ (สำหรับ IIS บน Windows) ซึ่งหากมีไฟล์ที่อัปโหลดไปอยู่ภายในโฟลเดอร์นี้โดยตรง อาจถูกเข้าถึงและรันได้โดยตรงจาก URL

1.การโจมตีผ่านการรันไฟล์อันตราย (Remote Code Execution - RCE) - หากผู้ใช้สามารถอัปโหลดไฟล์ .php หรือ .jsp และระบบไม่มีการตรวจสอบที่ดี อาจทำให้แฮกเกอร์รันโค้ดอันตรายบนเซิร์ฟเวอร์ได้

2.การโจมตีแบบ Local File Inclusion (LFI) หรือ Directory Traversal - หากเว็บอนุญาตให้โหลดไฟล์โดยใช้พาธที่กำหนดเอง อาจมีช่องโหว่ที่ทำให้ผู้โจมตีเข้าถึงไฟล์ระบบที่สำคัญ เช่น /etc/passwd บน Linux หรือ C:\Windows\System32\ บน Windows

3.การเข้าถึงไฟล์ที่มีข้อมูลสำคัญ - ผู้โจมตีอาจเข้าถึงไฟล์ที่มีข้อมูลส่วนตัว หรือโค้ดเซิร์ฟเวอร์ที่สำคัญโดยตรงผ่าน URL

  1. แนวทางปฏิบัติที่ดีในการจัดเก็บไฟล์จากแหล่งไม่น่าเชื่อถือ

✅ 1. จัดเก็บไฟล์นอก Web Root

✅ 2. กำหนดสิทธิ์ไฟล์ (File Permissions) อย่างเคร่งครัด

✅ 3. ป้องกันการอัปโหลดไฟล์ที่เป็นอันตราย

✅ 4. ใช้ไฟล์ Proxy หรือ Script เพื่อดึงไฟล์แทน

✅ 5. ใช้ Content Security Policy (CSP) ป้องกันการรันไฟล์ที่เป็นอันตราย

  1. สรุป
    • การเก็บไฟล์จากแหล่งไม่น่าเชื่อถือ ต้องจัดเก็บไว้นอก Web Root และ ต้องกำหนดสิทธิ์ไฟล์ให้จำกัดที่สุด เพื่อป้องกันการโจมตี เช่น RCE และ LFI วิธีปฏิบัติที่แนะนำคือ: ✅ เก็บไฟล์ไว้ในไดเรกทอรีที่ปลอดภัย นอก Web Root ✅ ใช้การตรวจสอบ MIME Type และเปลี่ยนชื่อไฟล์ก่อนบันทึก

✅ ใช้ Proxy หรือ Script เป็นตัวกลางในการเสิร์ฟไฟล์

✅ ตั้งค่าไฟล์ให้มีสิทธิ์ต่ำสุดและใช้ CSP

Gemini : การจัดเก็บไฟล์อย่างปลอดภัย

ตัวอย่าง

สรุป

My self : Files obtained from untrusted sources are stored outside the web root เป็น การตรวจสอบว่าไฟล์ที่ได้รับจากแหล่งที่ไม่น่าเชื่อถือถูกจัดเก็บไว้นอกเว็บรูท โดยมีสิทธิ์ที่จำกัด โดยควรมีการตรวจสอบที่รัดกุม การเก็บไฟล์จากแหล่งไม่น่าเชื่อถือ ต้องจัดเก็บไว้นอก Web Root และ ต้องกำหนดสิทธิ์ไฟล์ให้จำกัดที่สุด เพื่อป้องกันการโจมตี

✅ เก็บไฟล์ไว้ในไดเรกทอรีที่ปลอดภัย นอก Web Root

✅ ใช้การตรวจสอบ MIME Type และเปลี่ยนชื่อไฟล์ก่อนบันทึก

✅ ใช้ Proxy หรือ Script เป็นตัวกลางในการเสิร์ฟไฟล์

✅ ตั้งค่าไฟล์ให้มีสิทธิ์ต่ำสุดและใช้ CSP