# Audit dan perubahan kandidat rilis 1.0

**Basis:** arsip aplikasi dari pengguna pada sesi ini.

## Penguatan yang diimplementasikan

- Memisahkan `public_html` sebagai DocumentRoot; file `private/config.php` berisi kredensial nyata
  dan ekspor database **tidak** dimasukkan dalam arsip distribusi.
- Menghapus halaman HTML pengujian login/pembuatan guru yang tidak diperlukan di produksi.
- Menolak perubahan presensi historis Guru; tanggal serta jam Masuk/Pulang berasal dari server.
- Mengambil identitas (nama, NIP, guru_key) dari tabel guru aktif di server untuk record Guru.
- Mengikat presensi pulang pada record guru aktif hari itu, mencegah presensi ganda secara berurutan.
- Pengajuan izin Guru dipaksa `MENUNGGU`, tidak boleh disetujui atau dihapus lewat API Guru.
- Filter Origin/Referer lintas situs ketika header tersedia, dan cookie sesi SameSite=Lax.
- Batas percobaan login per sesi (8 kali/15 menit); batas IP/WAF belum tersedia.
- Mengurangi informasi yang dikembalikan endpoint health.
- Menolak eksekusi skrip di folder upload menggunakan aturan Apache `.htaccess`.
- Menambahkan migrasi jadwal Tahap A yang hilang pada arsip sebelumnya.

## Risiko yang masih memerlukan pekerjaan/pengujian

- Belum menguji API dan database dengan MySQL XAMPP atau cPanel hidup; lint hanya memeriksa sintaks.
- Belum ada penguncian transaksi/constraint kuat untuk mencegah dua presensi bersamaan (race condition).
- Belum ada token anti-CSRF per sesi untuk semua operasi mutasi.
- Belum ada rate-limit IP global, log audit Admin terpusat, maupun pengetesan keamanan eksternal.
- Lampiran dan sebagian selfie masih berada di URL publik atau tersimpan pada payload JSON;
  akses privat dan retensi data belum sepenuhnya dikendalikan.
- Aplikasi lama mengandung logika klien yang kompleks; perubahan jam server dapat memerlukan penyelarasan tampilan.
- Foto selfie/GPS dari browser tidak dapat menjadi bukti anti-pemalsuan yang mutlak.
- Web Push memerlukan composer package, VAPID, SSL dan cron; tidak otomatis aktif hanya dengan upload ZIP.
- Ekspor riwayat database dan migrasi data produksi memerlukan proses terpisah di pihak pengelola.
- Untuk slip gaji/penghitungan honor, lakukan audit keputusan bisnis bersama Yayasan sebelum produksi.

**Kesimpulan:** kandidat rilis yang diperkeras, **bukan sertifikasi keamanan dan bukan jaminan bebas bug**.
