Volume 9 · OCR & Auxiliary
"OCR & Auxiliary" คือกลุ่ม repo เล็กที่ไม่ได้เป็นบริการแกนกลางของแพลตฟอร์ม VTRC แต่ยังอยู่ใน workspace ขององค์กร — บริการ OCR ที่ยังอยู่ระหว่างตั้งต้น, สคริปต์วิเคราะห์ log แบบ offline, เว็บสมัครงานสาธารณะ, และ sandbox ฝึกฝนของทีม i3dev
จากการตรวจสอบโค้ดจริงของ 4 repo พบว่าความเสี่ยงสูงสุดของกลุ่มนี้ไม่ได้อยู่ที่ความซับซ้อนทางเทคนิค แต่อยู่ที่การจัดการข้อมูลส่วนบุคคล (PII) และ secret — ทั้ง report-log และ recruitment-web มีรายการระดับ Critical ที่เกี่ยวกับ PII/secret รั่วไหลผ่าน git repository โดยตรง
Repository ในกลุ่ม
| Repo | Branch | Stack จริง | หน้าที่ |
|---|---|---|---|
vtrc-ocr-api | main | Express.js + Swagger | บริการ OCR ที่ตั้งใจไว้ — แต่ปัจจุบันเป็น mock ทั้งหมด ไม่มี OCR engine จริง |
report-log | master | Node.js script (moment) | สคริปต์วิเคราะห์ log คำขอ GraphQL ของ vtrc-api แบบ offline — ไม่ใช่ HTTP service |
recruitment-web | prod (default: master) | React 18 (CRA) + Ant Design 5 | เว็บสมัครงานสาธารณะของสภากาชาดไทย — เชื่อมต่อ recruitment-api |
interns_playground | main | Express + TypeScript + PostgreSQL | sandbox ฝึกฝนของทีม i3dev — ไม่ใช่ระบบ production (ดูหลักฐานที่ interns_playground/index) |
ข้อค้นพบสำคัญ — ภาพรวมกลุ่มนี้
vtrc-ocr-apiไม่มี OCR logic จริงแม้แต่บรรทัดเดียว — endpointPOST /api/ocr/processคืนข้อความคงที่'Sample OCR result text'เสมอ (vtrc-ocr-api/services/ocr.service.js:26-34) และเก็บผลลัพธ์ใน in-memoryMapที่หายทุกครั้งที่ process restart — repo อยู่ในสถานะ scaffold ช่วงตั้งต้น (3 commit ทั้งหมด) ดูรายละเอียดที่ vtrc-ocr-api/02-core-pipelinereport-logมีเลขบัตรประชาชนไทยจริงของผู้ใช้ระบบฝังอยู่ใน git repository แบบ plaintext — ไฟล์request_*.logที่ export มาจากvtrc-apiและถูก commit เข้า repo นี้ทั้ง 50 ไฟล์ มีcitizenId/birthDate/empCodeปนอยู่ใน querysendVerifyCodeโดยไม่ mask (report-log/request_2023-02-17.log) และ.gitignoreของ repo เปิดให้ commit ไฟล์.logได้ตั้งใจ (บรรทัด*.logถูก comment ปิด) ดูรายละเอียดที่ report-log/03-scorecardrecruitment-webเก็บ production secret key ไว้ใน git และ inline เข้า client bundle —REACT_APP_SECRET_KEY/REACT_APP_PRIVATE_KEYที่ใช้เข้ารหัส PII ของผู้สมัครงานทั้งระบบ ถูก commit ไว้ใน.env/.env.uat/.env.devและเพราะเป็น CRA ค่านี้จะถูก inline เข้า JS bundle ที่ทุกคนดาวน์โหลดได้จากเบราว์เซอร์อยู่แล้ว — การ "เข้ารหัส" PII ฝั่ง client ในสถาปัตยกรรมปัจจุบันจึงไม่ได้ป้องกันความลับของข้อมูลจริง ดูรายละเอียดที่ recruitment-web/03-scorecardrecruitment-webมี dev-mode OTP bypass ฝังอยู่ใน production bundle — ถ้า build ด้วยREACT_APP_NODE_ENV=devระบบจะข้าม backend OTP ทั้งหมดและใช้ค่าคงที่111111เสมอ (recruitment-web/src/components/header/index.js:230-231) เป็น runtime check ที่ไม่ได้ถูก strip ออกจาก bundle โดย build toolreport-logและrecruitment-webเป็นหลักฐานยืนยัน (ไม่ใช่แค่สันนิษฐาน) ว่าvtrc-apiเขียน request log แบบrequest_{yyyy-mm-dd}.logที่มี headerapikey/authorization/from.userIdครบ — ตรงกับที่ debugging order ของ v1 archive ระบุไว้ (docs-v1-archive/volume-03-vtrc-api/10-scorecard.md:334-338) แต่ยังไม่มีนโยบาย mask PII ก่อน export ไฟล์เหล่านี้ออกมาใช้งานนอก containerinterns_playgroundไม่มีความเกี่ยวข้องกับ production ของแพลตฟอร์ม — ยืนยันจาก README, ชื่อ feature branch, commit message, และการไม่มี reference ถึงระบบ VTRC ใดในโค้ดเลย (ดู interns_playground/index) — ไม่รวมอยู่ใน scorecard ของกลุ่มนี้
Scorecard summary (รวมทั้งกลุ่ม)
| Repo | 🔴 Critical | 🟡 High | 🟢 Medium | ดูรายละเอียด |
|---|---|---|---|---|
vtrc-ocr-api | 0 | 2 | 6 | 03-scorecard |
report-log | 1 | 1 | 3 | 03-scorecard |
recruitment-web | 1 | 2 | 7 | 03-scorecard |
interns_playground | — | — | — | ไม่มี scorecard (ไม่ใช่ production — ดู index) |
| รวม | 2 | 5 | 16 |
รายการ 🔴 Critical ทั้ง 2 รายการของกลุ่มนี้เกี่ยวกับ PII/secret ที่รั่วไหลผ่าน git repository โดยตรง (report-log มีเลขบัตรประชาชนจริง, recruitment-web มี encryption key จริง) — ทั้งสองควรได้รับการ remediate ก่อนรายการอื่นทั้งหมดในกลุ่มนี้ เพราะเป็นความเสี่ยงที่ "เกิดขึ้นแล้ว" ไม่ใช่ความเสี่ยงเชิงทฤษฎี ต่างจาก vtrc-ocr-api ที่ยังไม่มีข้อมูลจริงให้รั่วเพราะยังเป็น mock ทั้งหมด