เอกสาร Waypoint
หน้าเว็บไซต์ หลังบ้าน

🛡️ ระบบความปลอดภัย

มาตรการป้องกันที่มีในระบบ และสิ่งที่ควรทำหลังติดตั้งเพื่อความปลอดภัยสูงสุด

การป้องกันที่มีในระบบ

มาตรการรายละเอียด
SQL Injectionใช้ PDO Prepared Statements ทุก query — ไม่ต่อ string ลง SQL
XSSทุกข้อความที่แสดงผ่าน e() (htmlspecialchars) escape อัตโนมัติ
CSRFทุกฟอร์มที่เปลี่ยนแปลงข้อมูลมี CSRF token + ตรวจสอบฝั่ง server
SessionCookie แบบ HttpOnly + SameSite + Secure (บน HTTPS) + regenerate id ตอน login
Brute-forceจำกัดการ login ผิด 5 ครั้ง → ล็อก 5 นาที
Passwordเก็บแบบ hash (password_hash / bcrypt) — ไม่เก็บ plaintext
Open Redirectredirect() อนุญาตเฉพาะ URL ภายในโดเมนเดียวกัน
HTTP HeadersX-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
Emailรหัสผ่าน SMTP เข้ารหัส · ส่งผ่าน TLS ตรวจใบรับรอง · กัน header injection · ลิงก์ในอีเมลใช้ URL ที่ตั้งไว้ (ไม่เชื่อ Host header) · ลูกค้าเห็นอีเมลแบบปิดบังบางส่วน
BotsGoogle reCAPTCHA v2/v3 บนฟอร์มจอง ส่งพัสดุ อัปโหลดสลิป และ login หลังบ้าน
Paymentsราคาคำนวณฝั่งเซิร์ฟเวอร์ · webhook ตรวจลายเซ็น/ดึงสถานะจาก gateway ใหม่ · สลิปเก็บนอกพื้นที่สาธารณะ
Re-installตัวติดตั้ง install/ ล็อกตัวเองหลังติดตั้ง (lock file + ตรวจว่ามีผู้ใช้แล้ว) · ลบบัญชีตัวอย่างและสร้างกุญแจเข้ารหัสใหม่ให้ทุกการติดตั้ง

การเข้าระบบ + Brute-force

หมายเหตุ: ระบบตรวจ production จากชื่อ host — ถ้าไม่ใช่ localhost หรือ IP ภายใน จะถือว่าเป็น production (ปิดแสดง error และ demo credentials อัตโนมัติ)

CSRF Protection

ทุกฟอร์มที่บันทึก/ลบ/แก้ไขข้อมูล จะมี hidden field _csrf และ server ตรวจด้วย csrf_required() ก่อนทำงาน หาก token ไม่ตรงจะตอบ 403

ครอบคลุม: login, ผู้ใช้, เปลี่ยนรหัส, ตั้งค่า, ประกาศ, สไลด์โชว์, สถานี, รถ, เส้นทาง, เที่ยวรถ, GPS, สัมภาระ, พัสดุ, การจอง, License, อัปเดต และฟอร์มฝั่งลูกค้า (จอง + ชำระเงิน)

การอัปโหลดไฟล์

ไฟล์ที่อัปโหลด (logo, favicon, สไลด์โชว์) จะถูกตรวจสอบ:

  1. ตรวจ MIME จริงด้วย finfo (ไม่เชื่อนามสกุลไฟล์)
  2. รูปภาพต้องผ่าน getimagesize() — กันไฟล์ .php ปลอมเป็น .png
  3. เปลี่ยนชื่อไฟล์เป็นแบบสุ่ม (กันการเดา path)
  4. ตั้ง permission 0644 (ห้าม execute)
  5. เก็บใน uploads/ ที่มี .htaccess ปิดการรัน PHP
ประเภทชนิดไฟล์ขนาดสูงสุด
รูปภาพ (logo/slide)PNG, JPG, WEBP, GIF, SVG2–5 MB
วิดีโอ (slide)MP4, WebM, MOV50 MB

เช็กลิสต์หลังติดตั้ง

  • ✅ ลบโฟลเดอร์ install/ ออกจากเซิร์ฟเวอร์ (ตัวติดตั้งล็อกตัวเองแล้ว แต่ไม่ควรเหลือไว้)
  • ✅ เปลี่ยนรหัสผ่าน admin จาก default ทันที
  • ✅ ใช้ HTTPS — เพื่อให้ session cookie แบบ Secure และ HSTS ทำงาน
  • ✅ ตั้งค่า DB user ที่มีสิทธิ์เฉพาะ database นี้ (ไม่ใช้ root บน production)
  • ✅ สำรองข้อมูล ฐานข้อมูลสม่ำเสมอ
  • ✅ อัปเดตระบบ เมื่อมีเวอร์ชันใหม่ (ระบบ → อัปเดตระบบ)
โดยสรุป: ระบบมาพร้อมการป้องกันมาตรฐานครบถ้วน — เพียงใช้ HTTPS, เปลี่ยนรหัส default, และสำรองข้อมูล ก็พร้อมใช้งานจริงได้อย่างปลอดภัย