ความปลอดภัยของระบบ (System Security) 🔒
อัปเดตล่าสุด: 7 มิถุนายน 2026
1. การยืนยันตัวตนและ Session
- NextAuth.js / Auth.js: ใช้ JWT session มาตรฐาน อายุสูงสุด 30 วัน (sliding refresh)
- bcryptjs: รหัสผ่านทุกบัญชีถูกแฮชแบบ salted หลายรอบก่อนจัดเก็บในฐานข้อมูล ไม่มี plain text password ในระบบเลย
- OAuth 2.0: Google และ LINE Sign-in ใช้ flow มาตรฐาน OAuth 2.0 ไม่มีการจัดเก็บรหัสผ่าน OAuth provider ในระบบของเรา
- Session Isolation: แต่ละ session ผูกกับ userId และ householdId อย่างเคร่งครัด — ไม่มีช่องทางให้ session ของผู้ใช้หนึ่งเข้าถึงข้อมูลของผู้ใช้อื่น
2. การรับส่งข้อมูล (Transport Security)
- HTTPS บังคับทุก endpoint: การสื่อสารระหว่าง client และ server เข้ารหัสด้วย TLS ตลอดเวลา
- Web Push Encryption: ข้อมูลที่ส่งผ่าน Push Notification เข้ารหัสด้วย VAPID protocol โดยใช้กุญแจ p256dh ของเบราว์เซอร์ผู้รับ — เฉพาะเบราว์เซอร์นั้นสามารถถอดรหัสได้
3. การแยกข้อมูลระหว่างครัวเรือน
ข้อมูลทุกประเภทในฐานข้อมูล (สิ่งของ, บิล, สัตว์เลี้ยง, เอกสาร ฯลฯ) ผูกกับ householdId ทุก API route ตรวจสอบสิทธิ์ก่อนส่งข้อมูล — บัญชีที่ไม่ได้เป็นสมาชิกครัวเรือนนั้นจะได้รับ 403 Forbidden ทันที ไม่มีข้อมูลรั่วข้ามครัวเรือน
4. การป้องกัน XSS และ Injection
- XSS Prevention: ข้อมูลที่รับจากผู้ใช้ (ชื่อสิ่งของ ป้ายราคา ฯลฯ) ผ่าน sanitization ก่อน render ใน DOM ป้องกัน Cross-Site Scripting
- SQL Injection: ใช้ Prisma ORM ซึ่งใช้ parameterized queries ตลอด — ไม่มีการ concatenate string เป็น SQL query ตรงๆ
- Schema Validation: Input ทุก API endpoint ผ่าน Zod schema validation ก่อนประมวลผล
5. ความปลอดภัยของไฟล์อัปโหลด
| ประเภทไฟล์ | MIME Types ที่รับได้ | ขนาดสูงสุด |
|---|---|---|
| รูปภาพ | JPEG, PNG, WebP, HEIC, GIF | 10 MB |
| เอกสาร PDF | application/pdf | 20 MB |
- ตรวจสอบ MIME type จาก magic bytes จริง ไม่ใช่แค่นามสกุลไฟล์
- ไฟล์จัดเก็บใน Cloudflare R2 (หรือ local storage) พร้อม path ที่สุ่มจาก UUID — ไม่สามารถเดา URL ได้
- สร้าง thumbnail 200×200px อัตโนมัติสำหรับรูปภาพ
6. ความปลอดภัยเทมเพลต
- Schema Validation: โครงสร้าง JSON ของเทมเพลตผ่าน sanitization และ validation ก่อน import — ป้องกันการฝัง script หรือ database injection ในเทมเพลต
- Moderation: เทมเพลตทุกรายการผ่านการตรวจสอบโดย admin ก่อนเผยแพร่สู่สาธารณะ
- Rate Limiting: มีการจำกัดจำนวนการอัปโหลดเทมเพลตต่อชั่วโมง เพื่อป้องกัน spam
7. Audit Log
ทุกการกระทำที่เปลี่ยนแปลงข้อมูล (เพิ่ม/แก้ไข/ลบ) จะถูกบันทึกใน Activity Log พร้อม snapshot ก่อน-หลัง (before/after JSON), ผู้กระทำ, และ timestamp ช่วยให้ตรวจสอบย้อนหลังได้เมื่อเกิดข้อพิพาทหรือ incident
8. รายงานช่องโหว่
พบช่องโหว่ security? กรุณาส่งรายงานมาที่ [email protected] พร้อมรายละเอียด steps to reproduce ทีมงานจะตอบกลับและแก้ไขโดยเร็ว