#backend#adr#tenant#security
ADR-0002 รหัสผ่าน DB ของผู้เช่าเป็น base64 ไม่ใช่การเข้ารหัส
สถานะ: accepted (ตรงกับโค้ด). รหัสผ่านฐานข้อมูลของผู้เช่าในไฟล์ SMLConfig<CODE>.json ถูกแปลงด้วย base64 ผ่าน port CredentialCodec — ไม่ใช่การเข้ารหัส ใครเข้าถึงไฟล์ได้ก็ถอดรหัสได้ทันที (backend/docs/adr/0002-provider-credentials-base64-not-encrypted.md:7).
ทำงานอย่างไร
- ตอนสร้าง/แก้ Provider ผ่าน API admin, service เรียก
CredentialCodec.Encode(plaintext)แล้วเขียนผลลง JSON. - ตอนต่อ DB ของผู้เช่า
Decode(encoded)คืนค่าเดิม — ใช้base64.StdEncoding(base64_codec.go:20-26). - เพราะเป็น port จึงสลับเป็น AES ภายหลังได้โดยไม่แก้ผู้เรียก (
...0002...md:11).
ตัวเลือกที่ไม่เลือก
AES ผ่าน platform/security ตามแผน PLAN.md เดิม — ยังไม่ทำ เพื่อให้ API ออกเร็ว (...0002...md:11).
ผลที่ตามมา / ข้อควรระวัง
- ADR ระบุว่าเป็นช่องโหว่จริงสำหรับค่าที่เปิดสิทธิ์เต็มต่อ DB ลูกค้า ควรเปลี่ยนเป็นการเข้ารหัสจริงก่อนเปิด API นอกเครือข่ายภายในที่เชื่อถือได้ (
...0002...md:15). - ห้ามคัดลอกไฟล์
configs/ลง git หรือแชท (มีรหัสผ่านที่ถอดได้ง่าย) — ดู ตัวแปรสภาพแวดล้อมและการโหลด config ของ backend (Environment config). - ผลต่อการ deploy: ไฟล์ใน
CONFIG_DIRต้องเก็บเป็น volume/Secret ที่จำกัดสิทธิ์ (การ build และ deploy backend: Docker, Kubernetes, Makefile (Deployment)).
ที่มาในโค้ด
backend/internal/adapter/outbound/crypto/base64_codec.go:7—Base64CodecimplementsCredentialCodec(คอมเมนต์ชี้มาที่ ADR นี้).backend/internal/adapter/outbound/crypto/base64_codec.go:20—Encode/Decodeด้วยbase64.StdEncoding.backend/docs/adr/0002-provider-credentials-base64-not-encrypted.md:15— ผลที่ตามมา.
ดูเพิ่ม
ทะเบียน Provider แบบไฟล์ JSON (Provider registry) · ADR-0001 เก็บ config ของผู้เช่า (Provider) เป็นไฟล์ JSON ไม่ใช่ตาราง DB · สารบัญ ADR ของ backend (Architecture Decision Records)