new-vtrc-mobile — Scorecard
Legend:
- 🔴 Critical = active security/data-loss/availability risk
- 🟡 High = correctness/maintainability hazard, real impact
- 🟢 Medium = friction/hygiene, ยังไม่เป็นอันตราย
repo นี้อยู่ในระยะ early-stage (ดู index § เทียบกับ vtrc-mobile) พื้นผิวโจมตี (attack surface) เล็กกว่า vtrc-mobile มากเพราะมีแค่ไม่กี่หน้า แต่ก็ port ปัญหา security สำคัญบางอย่างมาจาก vtrc-mobile โดยไม่ได้แก้ และมีความเสี่ยง regression ด้าน token storage ที่แย่กว่าของเดิม
Cross-ref pipeline: 02-core-pipeline · screens: 03-screens
| ID | Severity | คำอธิบาย | หลักฐาน (file:line) | การแก้ไข |
|---|---|---|---|---|
| SEC-NEW-01 | 🔴 Critical | RSA private key เดียวกันกับ vtrc-mobile ถูก copy มา hardcode ซ้ำในไฟล์ constant | new-vtrc-mobile/src/constants/RSAKey.ts:11-38 (เทียบ vtrc-mobile/src/utils/login.js:16-42 — ค่าเหมือนกันทุกตัวอักษร) | เดียวกับ SEC-MOBILE-01 — ย้าย key pair ไปสร้าง/เก็บที่ server แก้ปัญหาที่ต้นทาง (ถ้าแก้ที่ vtrc-mobile แล้วต้องแก้ที่นี่พร้อมกัน เพราะเป็น key เดียวกัน) |
| SEC-NEW-02 | 🟡 High | accessToken/refreshToken ถูก persist ผ่าน AsyncStorage ตรง (plain, ไม่เข้ารหัส) — เป็นการถอยหลังจาก vtrc-mobile ที่ใช้ keychain/encrypted-shared-prefs ผ่าน createSensitiveStorage | new-vtrc-mobile/src/redux/store.ts:13,20-25 (เทียบ vtrc-mobile/src/app/store.js:9,55-58 ที่ใช้ sensitive storage) | เปลี่ยน persistConfig.storage ให้ใช้ keychain wrapper (เช่น react-native-keychain หรือ redux-persist-sensitive-storage แบบที่ vtrc-mobile ใช้อยู่) ก่อนที่ token จริงจะถูกเก็บแบบ plain text ใน production build |
| QUAL-NEW-01 | 🟡 High | ฟังก์ชัน refreshToken() ยิงไปที่ https://yourdomain.com/auth/refresh ซึ่งเป็น URL ตัวอย่างจาก boilerplate/tutorial ที่ยังไม่ถูกแทนด้วย endpoint จริง — ถ้าโค้ดนี้ถูกเรียกจริงจะ fail ทันที | new-vtrc-mobile/src/utils/Auth.ts:8-17 | ลบไฟล์นี้ถ้าไม่ใช้แล้ว (ดูเหมือน services/authService.ts มี auth logic จริงที่ทำงานแทนอยู่แล้ว) หรือแก้ endpoint ให้ตรงกับ REFRESH_TOKEN mutation ที่มีอยู่แล้วใน graphql/ |
| QUAL-NEW-02 | 🟢 Medium | ค่า host default เป็น UAT (ไม่ใช่ prod) พร้อม prod ที่ comment ทิ้งไว้ — pattern เดียวกับปัญหาที่พบใน vtrc-mobile (ไม่มี runtime resolver, ต้องแก้ source + rebuild) | new-vtrc-mobile/src/constants/HostAPI.ts:1-18 | ถ้าจะแก้ให้แก้พร้อมกับ vtrc-mobile ด้วย strategy เดียวกัน (build flavor/scheme) เพราะเป็นปัญหาโครงสร้างเดียวกันข้าม repo |
| QUAL-NEW-03 | 🟢 Medium | รหัสผ่านผู้ใช้ (เข้ารหัสด้วย RSA public key ของ EncryptCrypto.ts) ถูกเก็บไว้ใน redux state ที่ persist (state.auth.password) เพื่อใช้ภายหลัง (ไม่ชัดว่าใช้ทำอะไรต่อ — อาจเป็นสำหรับ biometric bypass ในอนาคตตาม pattern ของ vtrc-mobile) | new-vtrc-mobile/src/features/auth/authSlice.ts:11-22,28-35, new-vtrc-mobile/src/services/authService.ts:176-187 | ถ้าไม่มีความจำเป็นต้องใช้รหัสผ่านซ้ำหลัง login สำเร็จ ให้เอาออกจาก state ที่ persist ทันทีหลังใช้งาน ลด attack surface ของข้อมูลที่ sensitive |
| QUAL-NEW-04 | 🟢 Medium | ชื่อ internal package/app (MyNewProject) เป็นชื่อ scaffold เริ่มต้นที่ไม่เคยถูกเปลี่ยน — ปัญหาเดียวกับ rn_redcross ใน vtrc-mobile | new-vtrc-mobile/app.json:1-4, new-vtrc-mobile/package.json:2 | เปลี่ยนชื่อ package ให้สื่อถึงโปรเจกต์จริงก่อนจะขยายทีมพัฒนา |
| QUAL-NEW-05 | 🟢 Medium | CheckEmpCode screen มีไฟล์ครบ (.tsx + styles.ts + type.ts) แต่ import ถูก comment ปิดใน AuthNavigator — โค้ดค้างที่ทดสอบไม่ผ่านการ regression เพราะไม่ได้ถูกเรียกจริง | new-vtrc-mobile/src/navigation/AuthNavigator.tsx:5,12 | เปิดใช้งานถ้ายัง roadmap อยู่ หรือลบไฟล์ออกถ้าตัดสินใจไม่ใช้ pattern login แบบ 2 ขั้นแล้ว |
สรุปเชิงภาพรวม
จุดแข็งของ new-vtrc-mobile คือมี unit test จริง 18 ไฟล์, TypeScript ล้วน, และ dependency ทันสมัย (RN 0.78, React 19, @react-navigation v7) — เป็นฐานที่ดีกว่า vtrc-mobile ในแง่ maintainability ระยะยาว แต่ ทีมนำ pattern ที่มีปัญหาจาก vtrc-mobile มาโดยไม่ได้แก้ (RSA private key เดิม, host config แบบ comment-toggle เดิม) และเพิ่ม regression ใหม่ด้าน token storage (SEC-NEW-02) ควรแก้ SEC-NEW-01/02 ให้เรียบร้อยก่อนที่ codebase นี้จะขยายฟีเจอร์ต่อ เพราะรากฐาน security ที่ตั้งไว้ตอนนี้จะกลายเป็นมาตรฐานที่ฟีเจอร์ใหม่ทุกตัวเดินตาม
ดูเพิ่ม
- vtrc-mobile — แอปหลักที่
new-vtrc-mobileมีแนวโน้มจะมาแทนที่ในอนาคต (ยังไม่ถึงจุดนั้น ณ ตอนตรวจสอบ) - Volume 8 index — ภาพรวมกลุ่ม Mobile ทั้ง 3 repo