Skip to content

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

IDSeverityคำอธิบายหลักฐาน (file:line)การแก้ไข
SEC-NEW-01🔴 CriticalRSA private key เดียวกันกับ vtrc-mobile ถูก copy มา hardcode ซ้ำในไฟล์ constantnew-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🟡 HighaccessToken/refreshToken ถูก persist ผ่าน AsyncStorage ตรง (plain, ไม่เข้ารหัส) — เป็นการถอยหลังจาก vtrc-mobile ที่ใช้ keychain/encrypted-shared-prefs ผ่าน createSensitiveStoragenew-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-mobilenew-vtrc-mobile/app.json:1-4, new-vtrc-mobile/package.json:2เปลี่ยนชื่อ package ให้สื่อถึงโปรเจกต์จริงก่อนจะขยายทีมพัฒนา
QUAL-NEW-05🟢 MediumCheckEmpCode 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