Appearance
Isu Keamanan: Prompt & PDI Kelihatan di Network Request Client-Side
Status: Udah ketemu, belum difix (cuma arsip)
Severity: Tinggi
Scope: Integrasi Base44InvokeLLMyang lama (pre-migrasi)
Pelapor: Security review internal
Ringkasan Singkat
Di versi lama Soul Map Atlas yang masih jalan di platform Base44, system prompt lengkap, skema JSON, sama data sensitif user keliatan semua di network request yang dari browser. User yang login pake DevTools bisa lihat, copy, bahkan utak-atik instruksi LLM sama jurnal mentah yang dikirim buat analisis AI.
Arsitektur llm-proxy sekarang udah ngefix ini, tapi temuan ini tetap relevan buat:
- Audit keamanan dan compliance review ke depan
- Addendum kebijakan privasi atau terms of service
- Ngelasin kenapa migrasi dari
InvokeLLMclient-side Base44 itu wajib secara arsitektur
Bukti Screenshot

Di tab Network → Payload browser, kelihatan jelas seluruh body request ke InvokeLLM, termasuk:
- System prompt — instruksi persona lengkap (
"You are a compassionate growth guide...") - Entri jurnal mentah — mood, energy, stress score, sama teks jurnal lengkap
- Skema output — nama field JSON, tipe data, dan deskripsinya
- Business rules — aturan bahasa lembut dan output yang dilarang
Gimana Cara Kerja InvokeLLM yang Lama
Di arsitektur Base44 jadul, aplikasi frontend jalan di dalam ekosistem Base44 dan langsung nge-call integration endpoint platform:
Client (Browser) ──► Platform Base44
POST /api/apps/{appId}/integration-endpoints/Core/InvokeLLM
Payload: { prompt, response_json_schema, ... }Yang masalah:
- Client yang ngebangun prompt — system instruction, data user, sama skema dirakit di frontend bundle atau kode client-side.
- Client yang megang kredensial —
X-App-Iddan tokenAuthorization: Bearerkeliatan di request header. - Data sensitif lewat browser — teks jurnal private ngalir dari server (DB) → client → Base44 LLM endpoint, jadi bisa diinspeksi di tengah jalan.
- Nggak ada gatekeeper server-side — nggak ada lapisan backend buat validasi, sanitize, atau redact data sebelum masuk ke LLM.
Gimana Cara Kerja llm-proxy Sekarang
Arsitektur monorepo baru punya lapisan proxy di server:
Client (Browser) ──► API Worker (Cloudflare)
POST /api/v1/invokeDestiny
Payload: { system: "bazi", prompt: "input user", jsonMode: true }
API Worker ──► llmProxy()
Bangun prompt lengkap + skema di server
Baca BASE44_APP_ID / BASE44_ACCESS_TOKEN dari env secrets
API Worker ──► Base44 InvokeLLM
POST /api/apps/{appId}/integration-endpoints/Core/InvokeLLM
Headers: X-App-Id, Authorization: Bearer {token}Yang lebih aman:
- Server yang ngebangun prompt — system instruction, skema JSON, sama business rules cuma ada di
apps/api/src/services/. - Client kirim data minimal aja — cuma input mentah user sama flag fitur (misal
jsonMode). - Data sensitif nggak lewat browser — entri jurnal di-fetch server-side dari D1 dan langsung diteruskan ke proxy.
- Kredensial aman —
BASE44_ACCESS_TOKENadalah secret Cloudflare Worker, nggak pernah ke-expose ke client. - Ada validation layer — API bisa enforce rate limit, cek entitlement, sama sanitize input sebelum sampai ke LLM.
Dampak Keamanan
| Threat | Risiko Legacy | Mitigasi Sekarang |
|---|---|---|
| Prompt Injection | User bisa lihat sama ubah system prompt sebelum kirim, bypass aturan safety. | System prompt immutable di server. |
| PDI / PII Exposure | Teks jurnal, mood score, sama refleksi pribadi keliatan di DevTools / proxy logs. | Data sensitif tetap server-to-server; nggak pernah sampai ke payload browser. |
| Schema Enumeration | Skema JSON persis terbuka, gampang di-reverse-engineer. | Skema dibangun di server; client cuma nerima output final. |
| Credential Leakage | App ID dan bearer token keliatan di request header. | Kredensial adalah secret Worker env. |
| Compliance Violation | Potensi langgar GDPR / privacy policy kalau data user lewat client dalam plaintext. | Data minimization terpenuhi — client cuma nerima hasil yang udah diproses. |
Rekomendasi Addendum
Nggak perlu fix kode — arsitektur llm-proxy sekarang udah ngefix root cause-nya. Item di bawah ini disaranin buat kelengkapan dokumentasi dan kebijakan:
Update Privacy Policy
Tambahin bahasa eksplisit yang nyatakan entri jurnal sama refleksi pribadi diproses di server dan nggak pernah ditransmisikan dalam plaintext lewat browser user ke provider AI pihak ketiga.Security FAQ
Dokumentasiin buat user (dan auditor) kalau system prompt itu rahasia server-side, bukan template client-side, biar nggak ada kekhawatiran prompt-injection.Architecture Decision Record (ADR)
Catet keputusan desain buat nge-proxy semua panggilan LLM lewatapps/apidaripada ngizinin komunikasi client-to-Base44 langsung. Rujuk temuan keamanan ini sebagai pemicu utamanya.Vulnerability Disclosure Log
Simpan laporan ini diapps/docs/issues/sebagai referensi historis buat security review dan audit compliance ke depan.
Endpoint yang Kena Dampak (Legacy)
Fitur-fitur berikut dulu pake panggilan InvokeLLM client-side di implementasi Base44:
- Journal AI Insights — entri jurnal lengkap di-embed dalam prompt
- Destiny Analysis (BaZi) — data kelahiran dan system instruction terbuka
- Compatibility Deep Insights — relationship scores dan instruksi narasi personal terbuka
Referensi
- Implementasi proxy sekarang:
apps/api/src/services/llm/llm-proxy.ts - Konsumer layanan Destiny:
apps/api/src/services/destiny/invoke-destiny.ts - Konsumer layanan Jurnal:
apps/api/src/services/journal/generate-summary.ts - Konsumer Compatibility:
apps/api/src/services/compatibility/generate-deep-insights.ts - Dokumentasi endpoint integrasi Base44:
https://base44.app(eksternal)