Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • H happy-qa
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 11
    • Issues 11
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Metrics
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Pornpavit Tantilavasute
  • happy-qa
  • Issues
  • #2

Closed
Open
Created Sep 23, 2026 by Pornpavit Tantilavasute@joe_qaMaintainer0 of 4 tasks completed0/4 tasks

[QA Brain MVP] T2: Pre-Ingress Sanitizer (v1.0.0) & Request Fingerprinting Pipeline

สรุปงาน (Summary)

พัฒนาโมดูล Pre-Ingress Sanitizer (Policy v1.0.0) และ Canonical Request Fingerprinting Engine เพื่อตรวจจับและ Mask ข้อมูลความลับ (Secrets), ข้อมูลส่วนบุคคล (PII), และระงับความเสี่ยงจาก URL ภายนอก (SSRF / Active Tags) ก่อนที่ข้อมูลจะถูกบันทึกลงฐานข้อมูลหรือนำไปคำนวณ Idempotency

อ้างอิงข้อกำหนดสถาปัตยกรรม: RFC v4.1 (Section 2.7, 3)
ลำดับการทำงาน (Dependency): ขึ้นต่อกับ T1 (ต้องมี Data Model และ Types รองรับ)


ขอบเขตและงานที่ต้องทำ (Scope of Work)

1. ลำดับไปป์ไลน์ขาเข้า (Pre-Ingress Invariant Pipeline)

จัดเรียงลำดับการประมวลผลคำขอบันทึก Gotcha ให้เป็นไปตามมาตรฐาน: Authenticate -> Authorize -> Canonicalize Request -> Masking (Sanitizer Policy v1.0.0) -> Sanitized Payload -> Compute Request Fingerprint & Hash (จาก Sanitized Payload) -> Transactional DB Write

2. Sanitizer Policy v1.0.0 Rules

พัฒนาฟังก์ชัน Sanitizer ตรวจสอบและแทนที่ข้อความที่ตรงกับ Pattern:

  • API Keys & Tokens:
    • OpenAI / AI Token (sk-[a-zA-Z0-9]{20,}) $\rightarrow$ [REDACTED_API_KEY]
    • GitHub Token (ghp_[a-zA-Z0-9]{36}, github_pat_[a-zA-Z0-9_]{82}) $\rightarrow$ [REDACTED_TOKEN]
    • GitLab PAT (glpat-[a-zA-Z0-9\-_]{20,}) $\rightarrow$ [REDACTED_GITLAB_PAT]
    • Jira PAT / Bearer Auth (Bearer\s+[A-Za-z0-9\-\._~\+\/]+=*) $\rightarrow$ Bearer [REDACTED_TOKEN]
    • Private Key Headers (-----BEGIN [A-Z ]*PRIVATE KEY-----) $\rightarrow$ [REDACTED_PRIVATE_KEY]
    • Password Fields (password\s*[:=]\s*["']?[^"'\s]+["']?) $\rightarrow$ password=[REDACTED]
  • Personally Identifiable Information (PII):
    • เลขประจำตัวประชาชนไทย (13 หลักที่มี/ไม่มีขีด) $\rightarrow$ [REDACTED_TH_ID]
    • หมายเลขบัตรเครดิต (13–19 หลักตามมาตรฐาน Luhn) $\rightarrow$ [REDACTED_CARD]
    • เบอร์โทรศัพท์มือถือไทย $\rightarrow$ [REDACTED_PHONE]
    • อีเมลบุคลากร (เฉพาะโดเมนภายนอกหรือตามที่กำหนด) $\rightarrow [REDACTED_EMAIL]
  • SSRF & Dangerous URL Neutralization:
    • ห้ามการยิง HTTP/Network Request ออกภายนอกเด็ดขาด (No Outbound Fetch)
    • สกัด Active HTML Script Tags (<script>, <iframe>, javascript:)
    • ตรวจสอบ URL Protocol ใน evidenceRef: อนุญาตเฉพาะ http:, https: หรือ Markdown Text ปกติ

3. มาตรการ Fail-Closed

  • หากโมดูล Sanitizer เกิด Error หรือประมวลผล Regex นานเกิน Timeout (เช่น 1,000ms ReDoS Protection):
    • ระบบต้องระงับคำขอทันที ตอบกลับด้วยข้อผิดพลาด HTTP 500 / INTERNAL_ERROR
    • ห้าม เขียน Raw Payload ที่ยังไม่ผ่านการกรองลงใน Log หรือฐานข้อมูล

4. Canonical Request Fingerprinting จาก Sanitized Payload

  • ฟังก์ชันทำ Canonical Serialization:
    • เรียงลำดับ Keys ของ Object ตามพจนานุกรม (Alphabetical order) อย่างสม่ำเสมอ
    • ตัด Whitespace ซ้ำซ้อน
  • การคำนวณ Fingerprint:
    • requestFingerprint: คำนวณจาก Canonical Sanitized Payload เพื่อป้องกันไม่ให้ความลับดิบหรือความแตกต่างของ Whitespace ทำให้เกิด Key แตกต่างกัน: sha256(canonicalSerialize({ workspaceId, principalType, principalId, operation, sanitizerPolicyVersion: "1.0.0", sanitizedInput }))
    • sanitizedPayloadHash: SHA-256 ของ Sanitized Payload สำหรับใช้วัดความเปลี่ยนแปลงของเนื้อหา

เกณฑ์การตรวจรับ (Acceptance Criteria)

  • Unit Test ครอบคลุมชุดทดสอบ Secret & PII ครบทุกกรณี และแทนที่ด้วยแท็ก [REDACTED_*] ได้อย่างถูกต้อง 100%
  • Unit Test การเกิด Regex Timeout / Thrown Exception ยืนยันว่าระบบหยุดทำงานแบบ Fail-Closed และไม่คายข้อมูลดิบออกมา
  • คำขอสองคำขอที่มี Payload เดียวกันแต่มี Secret ต่างกัน เมื่อผ่านการ Mask แล้วจะได้ Fingerprint เดียวกัน ป้องกันการ bypass Idempotency
  • ยืนยันว่าไม่มีโค้ดส่วนใดใน Sanitizer ทำการส่ง HTTP request ออกไปภายนอก (SSRF Immunity)
Edited Sep 23, 2026 by Pornpavit Tantilavasute
Assignee
Assign to
Time tracking