fix/backend-admin-auth-guard
master
PR นี้ทำการตรวจสอบและปิดช่องโหว่ด้านความปลอดภัยของ Backend API (Elysia.js) ทั่วทั้งระบบ โดยบังคับใช้ Admin Authentication Guard (adminOnly Middleware) กับทุก Endpoint ที่เกี่ยวข้องกับ:
adminOnly
พร้อมทั้งกำจัดจุดรั่วไหลของข้อมูลสูตรสินค้า (bomItems และราคาต้นทุน rawMaterial) ที่เคยหลุดออกไปใน Public Catalog Query (GET /products และ GET /products/:id)
bomItems
rawMaterial
GET /products
GET /products/:id
new Elysia({ name: 'admin-auth' }).onBeforeHandle(...)
{ as: 'scoped' }
{ as: 'global' }
onBeforeHandle
.use(adminOnly)
apps/backend/src/middleware/auth.ts
JWT_SECRET
GET /api/products
GET /api/products/:id
variants
include: { bomItems: { include: { rawMaterial: true } } }
pricePerUnit
GET /api/products/:id/bom
GET /api/products/bom-status
/api/products
/api/products/brands
/api/products/:id
/api/products/:id/detail-sections
/api/products/bom-status
/api/products/:id/bom
/api/products/bulk
/bulk-delete
/api/products/:id/images
/api/products/:id/detail-sections/**
/api/categories
/api/categories/:id
/api/categories/:id/products
/api/categories/:id/sections
/api/categories/bulk-import
/api/categories/:id/media
/image
/api/categories/:id/sections/**
/api/profitability/**
/api/raw-materials/**
/api/business-analytics/**
/api/crm/**
/api/customers
/api/contacts
/api/newsletter/subscribers
/api/newsletter/subscribe
/api/orders
/api/orders/track
/api/orders/:id/status
/tracking
/api/orders/customer/:customerId
/api/tiktok/**
/lazada-orders/**
/shopee/**
/api/coupons/active
/validate
/api/coupons
/api/promotions/active
/api/promotions
/api/articles
/api/media
/api/product-attributes/definitions/**
apps/website
apps/spa
apps/admin
Authorization: Bearer <token>
apps/backend/src/routes/auth-guard.contract.test.ts
tsc -b && vite build
No dependencies set.
The note is not visible to the blocked user.
🛡️ Security Audit & Hardening Report
1. Executive Summary
PR นี้ทำการตรวจสอบและปิดช่องโหว่ด้านความปลอดภัยของ Backend API (Elysia.js) ทั่วทั้งระบบ โดยบังคับใช้ Admin Authentication Guard (
adminOnlyMiddleware) กับทุก Endpoint ที่เกี่ยวข้องกับ:พร้อมทั้งกำจัดจุดรั่วไหลของข้อมูลสูตรสินค้า (
bomItemsและราคาต้นทุนrawMaterial) ที่เคยหลุดออกไปใน Public Catalog Query (GET /productsและGET /products/:id)2. Root Cause & Technical Findings
2.1 Elysia Lifecycle Plugin Scoping Flaw
adminOnlyถูกสร้างด้วยnew Elysia({ name: 'admin-auth' }).onBeforeHandle(...)โดยไม่มีออปชัน{ as: 'scoped' }{ as: 'scoped' }หรือ{ as: 'global' }ฮุกonBeforeHandleที่ประกาศใน plugin ย่อยจะไม่ถูก propagate ไปยัง Parent Route เมื่อถูกเรียกใช้ผ่าน.use(adminOnly)ส่งผลให้ middleware ไม่ทำงานจริงในบาง Controller{ as: 'scoped' }ในonBeforeHandleของapps/backend/src/middleware/auth.tsและรวมศูนย์JWT_SECRETให้เป็น Single Source of Truth2.2 Business Confidentiality Leak in Public Queries
GET /api/productsและGET /api/products/:idทำการ queryvariantsโดยinclude: { bomItems: { include: { rawMaterial: true } } }pricePerUnit) ของสินค้าทุกรายการbomItemsออกจาก Public Queries ทั้งหมด ข้อมูล BOM จะเปิดให้เข้าถึงเฉพาะผ่านGET /api/products/:id/bomและGET /api/products/bom-statusซึ่งถูกครอบด้วยadminOnlyเท่านั้น3. Comprehensive Security Matrix
/api/products/api/products/brands/api/products/:id/api/products/:id/detail-sections/api/products/bom-status/api/products/:id/bom/api/products/api/products/:id/api/products/bulk,/bulk-delete/api/products/brands/api/products/:id/images/api/products/:id/detail-sections/**/api/categories/api/categories/:id/api/categories/:id/products/api/categories/:id/sections/api/categories/bulk-import/api/categories/api/categories/:id/media,/image/api/categories/:id/sections/**/api/profitability/**/api/raw-materials/**/api/business-analytics/**/api/crm/**/api/customers/api/contacts/api/contacts/api/newsletter/subscribers/api/newsletter/subscribe/api/orders/api/orders/track/api/orders/api/orders/:id/status,/tracking/api/orders/customer/:customerId/api/tiktok/**,/lazada-orders/**,/shopee/**/api/coupons/active,/validate/api/coupons(Admin CRUD)/api/promotions/active/api/promotions(Admin CRUD)/api/articles/api/articles(Mutations)/api/media/api/product-attributes/definitions/**4. Client Compatibility & Verification
apps/website,apps/spa):bomItemsที่ไม่จำเป็นapps/admin):Authorization: Bearer <token>อยู่แล้วในทุก Requestapps/backend/src/routes/auth-guard.contract.test.tstsc -b && vite build) สมบูรณ์ 100%5. OWASP Standards Compliance