MATERI 12 DARI 28
Error handling, logging, dan audit yang aman
Berikan pesan pengguna yang aman sambil menyimpan detail diagnostik minimum pada log internal.
Tujuan pembelajaran
- Membedakan user message dan internal log.
- Menggunakan correlation ID.
- Menghindari data sensitif pada log.
Konsep utama
Fail safely
Kegagalan authorization atau validasi harus menolak operasi.
Structured logging
Catat event, waktu, actor ID, object ID, dan hasil tanpa password/token.
Alur kerja teknis
- Tulis tujuan dan acceptance criteria.
- Buat perubahan kecil yang dapat ditinjau.
- Jalankan test dan baca diff sebelum menerima hasil AI.
Contoh implementasi
Pesan generik dan log internal
try {
$service->save($input);
} catch (Throwable $e) {
$requestId = bin2hex(random_bytes(8));
error_log("[request={$requestId}] ".get_class($e).": ".$e->getMessage());
http_response_code(500);
echo "Permintaan tidak dapat diproses. ID: ".htmlspecialchars($requestId);
}Structured event tanpa secret
console.error(JSON.stringify({
event: "profile_update_failed",
requestId: req.id,
userId: req.user.id,
errorType: error.name
}));Aspek keamanan
- Jangan log password, token, cookie, atau isi authorization header.
- Jangan tampilkan stack trace ke publik.
- Audit mutation penting tanpa menyimpan payload sensitif.
Kesalahan umum
- Menerima kode AI tanpa membaca diff dan memahami alur data.
- Menguji hanya happy path dan mengabaikan input salah atau batas nilai.
- Menyimpan secret, token, atau data nyata di prompt dan source code.
Pengujian dan verifikasi
- Jalankan contoh dengan input normal.
- Ulangi dengan input kosong, tipe salah, dan nilai batas.
- Pastikan error tidak membocorkan secret atau detail internal.
Latihan
- Modifikasi contoh dengan satu kebutuhan baru dan tulis acceptance criteria-nya.
- Tambahkan satu negative test lalu jelaskan risiko yang dicegah.
Checklist
- Tujuan dan batas pekerjaan jelas.
- Input divalidasi di server.
- Secret tidak berada di source/prompt.
- Test lulus dan diff sudah dibaca.
Rangkuman
Berikan pesan pengguna yang aman sambil menyimpan detail diagnostik minimum pada log internal.