# 07. Enterprise Developer & Security Whitepaper **Project:** Thai Traditional Massage Queue Management System (TTMQMS Enterprise) **Standard:** OWASP Top 10 2021 Mitigation & Clean Architecture PSR-12 **Version:** 1.0.0 Production --- ## 1. Developer Architecture & Clean Code Guidelines ทีมพัฒนาจะต้องปฏิบัติตามมาตรฐานการเขียนโค้ดเพื่อรักษาความปลอดภัยและประสิทธิภาพสูงสุดของระบบ: - **PSR-12 Coding Standard:** โค้ด PHP ทั้งหมดใน `src/` ต้องผ่านเกณฑ์ PSR-12 การตั้งชื่อตัวแปรใช้ CamelCase สำหรับ Method/Property และ PascalCase สำหรับ Class - **Separation of Concerns:** - **Controllers (`src/Controllers/`):** ทำหน้าที่ตรวจสอบ HTTP Request และส่งคืน JSON Response เท่านั้น ห้ามเขียนคำสั่ง SQL หรือ Business Logic ใน Controller เด็ดขาด - **Services (`src/Services/`):** เป็นศูนย์รวม Business Logic เช่น `SmartQueueEngine`, `SoapNoteService` - **Repositories / Models (`src/Models/`):** ทำหน้าที่ติดต่อฐานข้อมูลผ่าน PDO Prepared Statements เท่านั้น --- ## 2. OWASP Top 10 Security Checklist & Mitigation ### 2.1 A01:2021 – Broken Access Control - **Mitigation:** ทุก API Endpoint (ยกเว้น `/auth/login` และ `/queues/walkin`) จะถูกตรวจสอบสิทธิ์ผ่าน `JwtAuthMiddleware` และ Role-Based Access Control (RBAC) หากหมอนวดพยายามเข้าถึง API ของแคชเชียร์ ระบบจะปฏิเสธด้วยสถานะ `HTTP 403 Forbidden` ### 2.2 A02:2021 – Cryptographic Failures - **Mitigation:** - รหัสผ่านผู้ใช้ถูกเข้ารหัสด้วย **Argon2id** (Memory-hard algorithm ที่ทนทานต่อ GPU Brute-force) - ข้อมูลความลับและการสื่อสารระหว่างเซิร์ฟเวอร์ใช้ **TLS 1.3** และ **mTLS** สำหรับ HIS Gateway - ข้อมูลส่วนบุคคลของผู้ป่วย (HN, เลขบัตร 13 หลัก) ได้รับการปกป้องตามนโยบาย PDPA ### 2.3 A03:2021 – Injection (SQLi & XSS) - **Mitigation:** - การเรียกใช้ฐานข้อมูลทั้งหมดผ่าน **PDO Prepared Statements with Bound Parameters** ป้องกัน SQL Injection 100% - เอาต์พุตที่แสดงผลบนหน้าเว็บ PWA ถูกคัดกรองผ่าน Alpine.js `x-text` (Auto HTML-escaping) ป้องกัน Cross-Site Scripting (XSS) ### 2.4 A07:2021 – Identification and Authentication Failures - **Mitigation:** - บังคับใช้ **2-Factor Authentication (TOTP RFC 6238)** กับบัญชีเจ้าหน้าที่ทุกระดับ - กำหนดเวลาหมดอายุของ JWT Access Token ไว้เพียง **60 นาที** - ล็อกบัญชีผู้ใช้ชั่วคราว 15 นาที หากกรอกรหัสผ่านผิดเกิน 5 ครั้ง (Brute-force Throttle) --- ## 3. Comprehensive Troubleshooting Guide (การแก้ไขปัญหาเบื้องต้น) ### ปัญหาที่ 1: เครื่องอ่านบัตรประชาชน Smart Card ไม่ตอบสนองเมื่อกดปุ่มบนหน้าเว็บ - **สาเหตุ:** เบราว์เซอร์ไม่ได้รับอนุญาตให้ใช้ WebUSB API หรือยังไม่ได้ติดตั้งบริการ PCSC Daemon - **วิธีแก้ไข:** 1. ตรวจสอบว่าเปิดใช้งานหน้าเว็บด้วย **Google Chrome** หรือ **Microsoft Edge** ผ่านโปรโตคอล **HTTPS** 2. ในเบราว์เซอร์ ไปที่ `chrome://settings/content/usbDevices` แล้วตรวจสอบว่าอนุญาตให้ `ttmqms.hospital.go.th` เข้าถึงอุปกรณ์ USB แล้ว 3. ตรวจสอบสถานะ PCSC Service ในเครื่องคอมพิวเตอร์: `sudo systemctl status pcscd` (Ubuntu) หรือใน Windows Services ### ปัญหาที่ 2: AI Smart Queue ไม่ยอมจัดสรรหมอนวด (แจ้งเตือน ไม่มีหมอนวดว่าง) - **สาเหตุ:** หมอนวดในสาขาปฏิบัติงานครบชั่วโมงกำหนด (Max Daily Mins = 480) หรือเปลี่ยนสถานะเป็น *Busy / Off_Duty* - **วิธีแก้ไข:** 1. ไปที่หน้า **"จัดการห้องนวด & เตียง"** เพื่อตรวจสอบว่ามีเตียงสถานะ *Available* หรือไม่ 2. ตรวจสอบตาราง Workload ในหน้าผู้บริหาร หากหมอนวดทำงานครบ 8 ชม. ให้พิจารณากดเพิ่มโควตาเวลาชั่วคราวในหน้า Settings หรือเปลี่ยนสถานะหมอนวดท่านอื่นให้เป็น *Available* ### ปัญหาที่ 3: เครื่องพิมพ์ความร้อน ESC/POS ไม่ออกใบคิว - **สาเหตุ:** ขาดการเชื่อมต่อสาย USB หรือกระดาษความร้อนหมด/เปิดฝาค้างไว้ - **วิธีแก้ไข:** 1. ตรวจสอบไฟสถานะบนเครื่องพิมพ์ ESC/POS 80mm 2. กดปุ่ม **"เชื่อมต่อ USB Printer"** ที่มุมขวาบนของหน้าเว็บอีกครั้ง และเลือกชื่ออุปกรณ์ Printer จาก Popup ของเบราว์เซอร์