# Risiko migrasi | Risiko | Dampak | Mitigasi | |--------|--------|----------| | **MD5 password** | Kompromi kredensial mudah | Rencanakan upgrade bcrypt/argon; sementara pertahankan untuk kompatibilitas mobile | | **Token plain di DB** | Token bocor = impersonation | Hash token di DB + bandingkan; atau JWT pendek umur | | **CORS `*`** | Origin jahat memanggil API jika kombinasi browser | Setelah cutover, batasi origin; tetap POST + token | | **Upload base64** | Beban memori / file besar / MIME palsu | Validasi ukuran, tipe, virus scan; limit body | | **Path upload** | Salah permission / traversal | `public/assets/uploads` + nama file random (sudah mirip legacy) | | **Query join `daftar_today`** | Dulu string tanggal inline | Di CI4 memakai `escape()`; tetap review indeks DB | | **serialize(`jadwal`) di presensi** | Kaku saat skema berubah | JSON column atau normalisasi jadwal | | **PHPExcel** | Usang, tidak aman | Ganti PhpSpreadsheet saat modul laporan dimigrasi | | **HMVC + Grocery** | Tidak ada port 1:1 CI4 | Rencanakan ulang modul admin per domain | | **TailAdmin source** | `css/style.css` memakai `@import "tailwindcss"` — perlu build untuk CSS penuh | Foundation admin memakai **Tailwind CDN**; aset TailAdmin (logo, FA) disalin; untuk pixel-perfect jalankan build template | ## Blocker potensial - **Kredensial DB** harus diisi manual di `.env` CI4 (jangan commit secret). - **Selisih charset** DB `utf8` (CI3) vs `utf8mb4` (CI4 default) — uji karakter Indonesia. - **File upload** yang sudah ada di server CI3 (`assets/uploads/...`) perlu **sinkron** atau symlink jika sharing storage dengan CI4. ## Dependensi eksternal - PHP ≥ 8.2 (CI4 appstarter). - MySQL/MariaDB dengan skema yang sama antara CI3 dan CI4 selama transisi.