มหาวิทยาลัยมหามกุฏราชวิทยาลัย · ระบบสาธิต (Demo)
ข้ามไปยังเนื้อหา

รายการตรวจสอบด้านประสิทธิภาพและความมั่นคงปลอดภัย (Test Checklist)

งวดที่ 1 · ทดสอบ

ดาวน์โหลด .md
← กลับไปศูนย์เอกสารข้อ TOR: 4.7.2, ก.1.1.1, ก.1.1.2

รายการตรวจสอบด้านประสิทธิภาพและความมั่นคงปลอดภัย (Test Checklist)

อ้างอิง TOR: ข้อ 4.7.2 (Checklist ประสิทธิภาพ/ความปลอดภัย), ภาคผนวก ก ข้อ 1.1.1 (มาตรฐานเว็บไซต์ภาครัฐ เวอร์ชัน 3.0) และข้อ 1.1.2 (มาตรฐานความมั่นคงปลอดภัยเว็บไซต์ พ.ศ. 2568) ฉบับ: 1.0 — วันที่ 3 ตุลาคม พ.ศ. 2569

ลักษณะของเอกสาร: เป็น การประเมินตนเอง (self-assessment) ของผู้รับจ้างจากการตรวจซอร์สโค้ดและการตั้งค่าของระบบสาธิต ไม่ใช่การรับรองจากหน่วยงานภายนอก สถานะใช้สัญลักษณ์ดังนี้ ผ่าน = มีหลักฐานในโค้ด/ผลทดสอบอัตโนมัติ · บางส่วน = ทำแล้วบางส่วนหรือทำได้เฉพาะในระบบสาธิต · ยังไม่ทำ = ยังไม่ได้ดำเนินการ (ระบุเหตุผล) · ต้องทำบน Production = ขึ้นกับโครงสร้างพื้นฐานจริง ผลตัวเลขจากการรันเครื่องมือให้ดูรายงานที่สร้างอัตโนมัติ (หัวข้อ 6) — เอกสารนี้ไม่ได้อ้างตัวเลขผลลัพธ์เอง การทดสอบเจาะระบบ (Penetration Test) ไม่ได้ดำเนินการในรอบนี้ตามคำสั่งของผู้ว่าจ้าง


1. Checklist ด้านประสิทธิภาพ (Performance)

#รายการตรวจเกณฑ์วิธีตรวจ/หลักฐานสถานะ
P-01First Contentful Paint หน้าแรกและหน้าแชต≤5 วินาที (TOR 12.2)E2E tests/e2e/public.spec.ts / chat.spec.ts (FCP < 5s) + npm run report:perfผ่าน (ระดับเครื่องเดียว)
P-02Time To First Token ของคำตอบ≤15 วินาทีที่ p95 (TOR 12.2)วัดทุกคำขอ (ApiRequestLog.ttftMs, Message.ttftMs) → /admin/sla-report, /documents/performance-reportดูผลในรายงาน
P-03Error rate≤5% ที่ p95 (TOR 12.2)ApiRequestLog.statusCode → SLA report; แจ้งเตือน error_rate เมื่อ >5% ใน 15 นาทีผ่าน (มีการวัด+แจ้งเตือน)
P-04ผู้ใช้พร้อมกัน≥500 concurrent (ก.1.4.1, 4.7.6)scripts/perf/load-test.ts ระดับเครื่องเดียว; ระดับ 500 ต้องใช้ HPA บน Kubernetesบางส่วน / ต้องทำบน Production
P-05รองรับบัญชีผู้ใช้ 1,000,000 บัญชีก.1.4.2npm run seed:perf-users -- --count=1000000 → prisma/perf.db วัดเวลาค้นหาด้วย emailHash (unique index)บางส่วน (วัดบน SQLite)
P-06SSE streaming ไม่ถูก bufferส่ง references ก่อนคำตอบ และ delta ทีละส่วนheader cache-control: no-cache, no-transform, x-accel-buffering: no; Ingress proxy-buffering: offผ่าน
P-07จำกัดคำขอ LLM พร้อมกัน + retryไม่ล้มเมื่อ provider ตอบ 429/5xxwithLlmSlot (ค่าเริ่มต้น 4 ช่อง LLM_MAX_CONCURRENT), fetchWithRetry exponential backoffผ่าน
P-08ขนาด prompt ไม่เกินเพดาน≤10,000 (Q&A) / ≤50,000 (Dhamma Talk) tokens (ก.4.2.1)fitContext() + tests/unit/graph.test.tsผ่าน
P-09ดัชนีค้นหาอัปเดตแบบ incrementalไม่ rebuild ทั้งดัชนีเมื่อเพิ่มเอกสารBm25Index.add/remove, reindexDocument()ผ่าน
P-10ฐานข้อมูลมีดัชนีบนคอลัมน์ที่ค้นบ่อย—@@index ใน prisma/schema.prisma (TokenUsage.createdAt, AuditLog.timestamp, Chunk.volume+item ฯลฯ)ผ่าน
P-11ฟอนต์โหลดแบบไม่บล็อกdisplay: swapnext/font/google (Kanit, Prompt, Noto Serif Thai) ใน src/app/[locale]/layout.tsxผ่าน
P-12Availability≥95%/เดือน (12.1, ก.1.6.1)uptime ของ process + ช่วง 5xx → SLA reportบางส่วน (วัดจาก session สาธิต)
P-13Auto ScalingHPA ตาม CPU 70% (ก.1.6.2)infra/helm/mbu-buddhist-ai/templates/hpa.yamlต้องทำบน Production

2. Checklist ด้านความมั่นคงปลอดภัย (Security)

#รายการตรวจวิธีตรวจ/หลักฐานสถานะ
S-01Server-side input validation ทุก endpoint (ก.2.1.3)zod schema ใน withApi({ body, query }); ค่าไม่ถูกต้อง → 400ผ่าน
S-02ป้องกัน SQL InjectionPrisma (parameterized query); ไม่มี raw SQL จาก input ผู้ใช้ผ่าน
S-03ป้องกัน XSSReact escape อัตโนมัติ; Markdown แสดงด้วย react-markdown (ไม่เปิด raw HTML); CSP script-src 'self' 'unsafe-inline'บางส่วน — CSP ยังอนุญาต 'unsafe-inline' (ควรเปลี่ยนเป็น nonce บน Production)
S-04CSRF token (ก.2.1.5)double-submit cookie + header x-csrf-token ใน src/middleware.ts; tests/api/rbac-ip-allowlist.test.tsผ่าน
S-05Brute force protection (ก.2.1.4)lockout 5 ครั้ง/15 นาที/บัญชี, 20 ครั้ง/IP; rate limit login 10/นาทีผ่าน
S-06Rate limit ระดับแอปเขียน 60/นาที, อ่าน 600/นาที ต่อ IP (in-memory)ผ่าน (Production ควรย้ายไป Redis/Ingress)
S-07การเก็บรหัสผ่านbcrypt cost 10ผ่าน
S-08นโยบายรหัสผ่านผู้ดูแล (ก.6.1.4)≥12 ตัว ผสม 4 ชนิด (password-policy.ts)ผ่าน
S-09SessionJWT HS256 อายุ 24 ชม. ใน cookie HttpOnly; SameSite=Lax (+Secure เมื่อ base URL เป็น https)ผ่าน
S-10RBAC + IP allowlist ส่วนผู้ดูแลwithApi({ auth }), ADMIN_IP_ALLOWLIST ใน middleware + audit การปฏิเสธผ่าน — ข้อสังเกต: IP อ่านจาก x-forwarded-for (src/server/security/ip.ts) จึงต้องวางหลัง proxy/Ingress ที่เขียน header ทับเสมอ มิฉะนั้นอาจปลอม header ได้
S-11ป้องกัน IDORบทสนทนาที่ไม่ใช่ของตน → 404 (tests/api/chat-qa.test.ts)ผ่าน
S-12Security headersCSP, X-Frame-Options DENY, X-Content-Type-Options nosniff, Referrer-Policy, Permissions-Policy, COOP, ปิด X-Powered-By (next.config.ts)ผ่าน
S-13HSTSเปิดเมื่อ ENABLE_HSTS=1 (ตั้งใน .env.production)บางส่วน (ต้องใช้กับ HTTPS จริง)
S-14TLS (ก.2.1.2)self-signed ผ่าน server.https.js (:3443); Production ใช้ cert-manager ที่ Ingressบางส่วน
S-15การเข้ารหัสข้อมูลส่วนบุคคล at rest (14.3)AES-256-GCM คอลัมน์อีเมล/ชื่อ (src/server/crypto.ts)ผ่าน (ไฟล์ SQLite ทั้งไฟล์ไม่ได้เข้ารหัส)
S-16ปิดบัง PII ในสำเนาบทสนทนาmaskPii() → Message.contentMaskedผ่าน
S-17ข้อความผิดพลาดไม่เปิดเผยรายละเอียดภายในwithApi ตอบ INTERNAL_ERROR ทั่วไป; stack trace อยู่ใน log เท่านั้นผ่าน
S-18Logging และ Audit trailJSON log + ApiRequestLog + AuditLog append-only (trigger) + hash chainผ่าน
S-19การจัดการความลับ.env ไม่อยู่ใน repository; API ไม่คืนค่าคีย์; Production ใช้ Kubernetes Secretผ่าน
S-20Vulnerability scan dependency (ก.2.2.2, 4.8.1)npm run report:security (npm audit) → /documents/vulnerability-scan-report; CI fail เมื่อ High/Criticalผ่าน (ดูตัวเลขในรายงาน)
S-21Penetration test (4.8.2)—ยังไม่ทำ — ไม่ได้ดำเนินการในรอบนี้ตามคำสั่งของผู้ว่าจ้าง (/documents/pentest-report)
S-22WAF / Anti-DDoS (ก.2.2.1)ตัวอย่าง annotation ใน infra/helm/mbu-buddhist-ai/values.yamlต้องทำบน Production
S-23อัปโหลดไฟล์ปลอดภัยจำกัดนามสกุล pdf/txt/md/xml/docx, ≤20MB, เก็บนอก public, parse ฝั่งเซิร์ฟเวอร์ผ่าน (ยังไม่มีการสแกนมัลแวร์)
S-24Container hardening (Production)runAsNonRoot, readOnlyRootFilesystem, drop ALL capabilities, seccomp RuntimeDefault (Helm values)ต้องทำบน Production
S-25สำรองและกู้คืน (ก.1.6.3)scripts/backup-db.sh, restore-db.sh, restore-test.sh → /documents/restore-test-reportผ่าน

2.1 ความปลอดภัยเฉพาะ AI (OWASP Top 10 for LLM / Agentic)

#ความเสี่ยงมาตรการในระบบสถานะ
AI-01Prompt injection ทางตรงinjection_pattern ใน guardrail + guard-classifier (LLM จริง)ผ่าน — วัดด้วยชุด INJ 20 เคส (/documents/guardrail-security-report)
AI-02Indirect injection ผ่านเอกสารsanitize ตอนนำเข้า + delimiter <<<DATA>>>ผ่าน
AI-03Sensitive information disclosure (system prompt)รูปแบบ “เปิดเผย prompt/system prompt” ถูกปฏิเสธ; /api/status ไม่คืนความลับผ่าน
AI-04Improper output handlingคำตอบ render เป็น Markdown ไม่รัน HTML; citation ที่ไม่อยู่ในรายการอ้างอิงถูกตัดผ่าน
AI-05Unbounded consumption / cost surgeเพดาน 24 ชม., per-prompt cap, input.maxChars, thinking budget, auto unavailable, แจ้งเตือนผ่าน
AI-06Misinformation / hallucinationบังคับอ้างอิงทุกย่อหน้า + ป้าย “ไม่มีอ้างอิง — โปรดตรวจสอบ” + ข้อความเตือน + วัดด้วย Benchmarkบางส่วน (ขึ้นกับผลประเมิน)
AI-07Excessive agencyAgent ไม่มีเครื่องมือเขียนข้อมูล/เรียกระบบภายนอก นอกจากค้นคลังความรู้ผ่าน
AI-08หัวข้ออ่อนไหว (การเมือง ศาสนา สุขภาพจิต)refuse_sensitive + วัดด้วย GR-2ผ่าน (ดูผลในรายงาน)

3. การประเมินตนเองตามมาตรฐานเว็บไซต์ภาครัฐ เวอร์ชัน 3.0 (ก.1.1.1)

ประเมินตามหมวดหลักของมาตรฐาน (การจัดกลุ่มด้านล่างเป็นการสรุปของผู้รับจ้าง) — สถานะใน /tor: partial

หมวดประเด็นหลักฐานในระบบสถานะ
ข้อมูลหน่วยงานชื่อหน่วยงาน ตราสัญลักษณ์ ที่อยู่ ช่องทางติดต่อHeader มีโลโก้ มมร. (alt text), Footer มีที่อยู่ตาม TOR ข้อ 17 และโทรศัพท์, หน้า /helpผ่าน
การเข้าถึงได้ (Accessibility)contrast, ข้อความทดแทนรูป, ภาษาของหน้า, ข้ามไปเนื้อหา, ใช้งานด้วยแป้นพิมพ์contrast.test.ts, alt ของโลโก้, <html lang={locale}>, ลิงก์ “ข้ามไปยังเนื้อหา” (Header), ปุ่มมี aria-* บางส่วนบางส่วน — ยังไม่ได้ตรวจ WCAG ครบทุกเกณฑ์ด้วยเครื่องมือ/ผู้ใช้จริง
การรองรับอุปกรณ์Responsive มือถือ/แท็บเล็ต/เดสก์ท็อปPlaywright 390/768/1280 ไม่มี horizontal scrollผ่าน (Chromium)
หลายภาษาไทย/อังกฤษnext-intl /th /en + ตรวจ key ครบผ่าน
ความเป็นส่วนตัวนโยบายความเป็นส่วนตัว, ความยินยอมคุกกี้/privacy-policy, แบนเนอร์คุกกี้ (ปฏิเสธได้), GA โหลดหลังยินยอมผ่าน
ความปลอดภัยHTTPS, การยืนยันตัวตน, การป้องกันการโจมตีพื้นฐานหัวข้อ 2บางส่วน (TLS จริงต้องบน Production)
การบริหารเนื้อหาวันที่ปรับปรุง, เวอร์ชันระบบFooter แสดงเวอร์ชันระบบและ prompt version; วันที่แสดงเป็น พ.ศ.บางส่วน
การค้นหาและนำทางเมนูชัดเจน, แผนผังเว็บไซต์เมนูหลักใน Header; ไม่มีหน้า sitemap/robots.txtบางส่วน — ควรเพิ่ม sitemap.xml และ robots.txt
สถิติการใช้งานเครื่องมือวัดผลGA4 (NEXT_PUBLIC_GA_ID) + Dashboard ภายในผ่าน (เมื่อมหาวิทยาลัยใส่ GA ID)
โดเมนภาครัฐใช้โดเมน .ac.th ของหน่วยงานกำหนด dhammaverse.mbu.ac.th ใน Ingressต้องทำบน Production (DNS ยังไม่ resolve)

4. การประเมินตนเองตามมาตรฐานความมั่นคงปลอดภัยเว็บไซต์ พ.ศ. 2568 (ก.1.1.2)

จัดกลุ่มตามประเด็นหลักด้านการรักษาความมั่นคงปลอดภัยเว็บไซต์ (การจัดกลุ่มเป็นของผู้รับจ้าง) — สถานะใน /tor: partial

ประเด็นหลักฐานสถานะ
การเข้ารหัสการสื่อสาร (HTTPS/TLS, HSTS)S-13, S-14บางส่วน
การยืนยันตัวตนและการจัดการเซสชันS-05, S-07–S-09ผ่าน
การควบคุมการเข้าถึง (RBAC, ส่วนผู้ดูแลจำกัด IP)S-10, S-11ผ่าน
การตรวจสอบข้อมูลนำเข้าและป้องกันการโจมตีเว็บ (SQLi, XSS, CSRF)S-01–S-04ผ่าน (มีข้อสังเกต CSP)
HTTP security headersS-12ผ่าน
การบันทึกเหตุการณ์และการตรวจสอบย้อนหลังS-18ผ่าน
การจัดการช่องโหว่และอัปเดตซอฟต์แวร์S-20 (npm audit ใน CI)ผ่าน
การทดสอบเจาะระบบS-21ยังไม่ทำ (ตามคำสั่งผู้ว่าจ้าง)
การป้องกัน DDoS/WAFS-22ต้องทำบน Production
การสำรองข้อมูลและกู้คืนS-25ผ่าน
การคุ้มครองข้อมูลส่วนบุคคลS-15, S-16, PDPA self-serviceผ่าน

5. การประเมินตนเองตาม OWASP Top 10 (2021)

รหัสหมวดมาตรการสถานะ
A01Broken Access ControlRBAC ทุก endpoint, IP allowlist, ownership check (IDOR → 404), SUPER_ADMIN-only สำหรับ backup/destruction/roleผ่าน (ทดสอบใน AT-01, AT-07, AT-22, E2E-25)
A02Cryptographic Failuresbcrypt, AES-256-GCM สำหรับ PII, JWT HS256 (AUTH_SECRET), TLSบางส่วน (TLS จริงบน Production)
A03Injectionzod + Prisma; prompt injection guardrailผ่าน
A04Insecure DesignClean architecture, threat model เฉพาะ AI (หัวข้อ 2.1), token budgetผ่าน
A05Security Misconfigurationsecurity headers, ปิด X-Powered-By, ค่าเริ่มต้นของ AUTH_SECRET ใน session.ts ใช้เฉพาะเมื่อไม่ได้ตั้งค่า (Production ต้องตั้งเสมอ), CSP ยังมี 'unsafe-inline'บางส่วน
A06Vulnerable and Outdated Componentsnpm audit (CI gate --audit-level=high)ผ่าน (ดู /documents/vulnerability-scan-report)
A07Identification and Authentication Failureslockout, rate limit, นโยบายรหัสผ่าน, OAuth state/PKCEผ่าน
A08Software and Data Integrity Failuresnpm ci + lockfile ใน CI, AuditLog hash chain, sanitize เอกสารนำเข้าผ่าน
A09Security Logging and Monitoring FailuresAuditLog, ApiRequestLog, app.log, แจ้งเตือน error rateผ่าน
A10Server-Side Request Forgeryระบบเรียก URL ภายนอกเฉพาะที่กำหนดใน env (LLM, TEI, OAuth, SMTP) ผู้ใช้กำหนด URL ไม่ได้ผ่าน

ข้อสังเกตที่ควรแก้ก่อนใช้งานจริง: (1) CSP แบบ nonce แทน 'unsafe-inline' (2) ย้าย rate limit ไป Redis/Ingress (3) เปิด HSTS + TLS จริง (4) ดำเนินการ Penetration Test โดยผู้ทดสอบอิสระก่อนเปิดให้บริการ (5) สแกนมัลแวร์ไฟล์อัปโหลด (6) เพิ่ม sitemap/robots

6. รายงานผลที่เกี่ยวข้อง

รายงานคำสั่งสร้าง
/documents/performance-reportnpm run report:perf
/documents/vulnerability-scan-reportnpm run report:security
/documents/pentest-report— (บันทึกว่าไม่ได้ดำเนินการในรอบนี้)
/documents/guardrail-security-reportnpm run report:evaluation หรือปุ่มที่ /admin/evaluation/security-report
/documents/restore-test-reportnpm run report:restore-test
/documents/sla-monthly-reportnpm run report:sla