🛡️ ระบบความปลอดภัย
มาตรการป้องกันที่มีในระบบ และสิ่งที่ควรทำหลังติดตั้งเพื่อความปลอดภัยสูงสุด
ในหน้านี้
การป้องกันที่มีในระบบ
| มาตรการ | รายละเอียด |
|---|---|
| SQL Injection | ใช้ PDO Prepared Statements ทุก query — ไม่ต่อ string ลง SQL |
| XSS | ทุกข้อความที่แสดงผ่าน e() (htmlspecialchars) escape อัตโนมัติ |
| CSRF | ทุกฟอร์มที่เปลี่ยนแปลงข้อมูลมี CSRF token + ตรวจสอบฝั่ง server |
| Session | Cookie แบบ HttpOnly + SameSite + Secure (บน HTTPS) + regenerate id ตอน login |
| Brute-force | จำกัดการ login ผิด 5 ครั้ง → ล็อก 5 นาที |
| Password | เก็บแบบ hash (password_hash / bcrypt) — ไม่เก็บ plaintext |
| Open Redirect | redirect() อนุญาตเฉพาะ URL ภายในโดเมนเดียวกัน |
| HTTP Headers | X-Frame-Options, X-Content-Type-Options, Referrer-Policy, HSTS, Permissions-Policy |
| File Upload | ตรวจ MIME จริง (finfo) + getimagesize + เปลี่ยนชื่อไฟล์สุ่ม + chmod 0644 |
| uploads/ | .htaccess ปิดการรันสคริปต์ PHP ในโฟลเดอร์อัปโหลด |
| Secrets | คีย์ API (Stripe/Omise/ตรวจสลิป/reCAPTCHA) เข้ารหัส AES-256-GCM ก่อนเก็บ กุญแจอยู่ใน config/app_key.php |
| รหัสผ่าน SMTP เข้ารหัส · ส่งผ่าน TLS ตรวจใบรับรอง · กัน header injection · ลิงก์ในอีเมลใช้ URL ที่ตั้งไว้ (ไม่เชื่อ Host header) · ลูกค้าเห็นอีเมลแบบปิดบังบางส่วน | |
| Bots | Google reCAPTCHA v2/v3 บนฟอร์มจอง ส่งพัสดุ อัปโหลดสลิป และ login หลังบ้าน |
| Payments | ราคาคำนวณฝั่งเซิร์ฟเวอร์ · webhook ตรวจลายเซ็น/ดึงสถานะจาก gateway ใหม่ · สลิปเก็บนอกพื้นที่สาธารณะ |
| Re-install | ตัวติดตั้ง install/ ล็อกตัวเองหลังติดตั้ง (lock file + ตรวจว่ามีผู้ใช้แล้ว) · ลบบัญชีตัวอย่างและสร้างกุญแจเข้ารหัสใหม่ให้ทุกการติดตั้ง |
การเข้าระบบ + Brute-force
- กรอกรหัสผิดเกิน 5 ครั้ง → ล็อก IP นั้น 5 นาที
- หน้าจะแสดงจำนวนครั้งที่เหลือ และปิดช่องกรอกเมื่อถูกล็อก
- เมื่อ login สำเร็จ ระบบจะ
session_regenerate_id()ป้องกัน session fixation - ข้อมูล demo (admin/admin123) จะแสดงเฉพาะตอน ไม่ใช่ production เท่านั้น
หมายเหตุ: ระบบตรวจ production จากชื่อ host — ถ้าไม่ใช่ localhost หรือ IP ภายใน จะถือว่าเป็น production (ปิดแสดง error และ demo credentials อัตโนมัติ)
CSRF Protection
ทุกฟอร์มที่บันทึก/ลบ/แก้ไขข้อมูล จะมี hidden field _csrf และ server ตรวจด้วย csrf_required() ก่อนทำงาน หาก token ไม่ตรงจะตอบ 403
ครอบคลุม: login, ผู้ใช้, เปลี่ยนรหัส, ตั้งค่า, ประกาศ, สไลด์โชว์, สถานี, รถ, เส้นทาง, เที่ยวรถ, GPS, สัมภาระ, พัสดุ, การจอง, License, อัปเดต และฟอร์มฝั่งลูกค้า (จอง + ชำระเงิน)
การอัปโหลดไฟล์
ไฟล์ที่อัปโหลด (logo, favicon, สไลด์โชว์) จะถูกตรวจสอบ:
- ตรวจ MIME จริงด้วย
finfo(ไม่เชื่อนามสกุลไฟล์) - รูปภาพต้องผ่าน
getimagesize()— กันไฟล์ .php ปลอมเป็น .png - เปลี่ยนชื่อไฟล์เป็นแบบสุ่ม (กันการเดา path)
- ตั้ง permission 0644 (ห้าม execute)
- เก็บใน
uploads/ที่มี .htaccess ปิดการรัน PHP
| ประเภท | ชนิดไฟล์ | ขนาดสูงสุด |
|---|---|---|
| รูปภาพ (logo/slide) | PNG, JPG, WEBP, GIF, SVG | 2–5 MB |
| วิดีโอ (slide) | MP4, WebM, MOV | 50 MB |
เช็กลิสต์หลังติดตั้ง
- ✅ ลบโฟลเดอร์
install/ออกจากเซิร์ฟเวอร์ (ตัวติดตั้งล็อกตัวเองแล้ว แต่ไม่ควรเหลือไว้) - ✅ เปลี่ยนรหัสผ่าน admin จาก default ทันที
- ✅ ใช้ HTTPS — เพื่อให้ session cookie แบบ Secure และ HSTS ทำงาน
- ✅ ตั้งค่า DB user ที่มีสิทธิ์เฉพาะ database นี้ (ไม่ใช้ root บน production)
- ✅ สำรองข้อมูล ฐานข้อมูลสม่ำเสมอ
- ✅ อัปเดตระบบ เมื่อมีเวอร์ชันใหม่ (ระบบ → อัปเดตระบบ)
โดยสรุป: ระบบมาพร้อมการป้องกันมาตรฐานครบถ้วน — เพียงใช้ HTTPS, เปลี่ยนรหัส default, และสำรองข้อมูล ก็พร้อมใช้งานจริงได้อย่างปลอดภัย
