Files
2026-09-11 16:03:00 +07:00

63 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Tahap 0–1: Persiapan dan Keamanan
Dokumen ini adalah checklist deployment untuk fondasi keamanan `accounting_dev`.
## Sebelum deploy
1. Backup database dan folder `uploads`, lalu lakukan uji restore di staging.
2. Rotasi seluruh password database yang pernah tersimpan di repository/source lama.
3. Konfigurasikan environment berdasarkan `.env.example` melalui Apache `SetEnv`, virtual host, container, atau secret manager. File `.env` tidak dibaca otomatis oleh aplikasi.
4. Gunakan `CI_ENV=production`, URL HTTPS, `COOKIE_SECURE=true`, dan encryption key acak minimal 32 karakter pada production.
5. Isi `ATTENDANCE_ALLOWED_SERIALS` dengan serial mesin yang sah.
6. Biarkan `DBCOMPARE_ENABLED=false` kecuali saat diagnosis terkontrol oleh Admin.
7. Pastikan web server dapat menulis `application/logs`, folder session PHP, dan `uploads`, tetapi tidak dapat mengeksekusi PHP dari `uploads`.
Contoh konfigurasi Apache development:
```apache
SetEnv CI_ENV development
SetEnv APP_BASE_URL http://localhost/accounting_dev/
SetEnv APP_ENCRYPTION_KEY ganti-dengan-secret-acak-yang-panjang
SetEnv DB_HOST 127.0.0.1
SetEnv DB_PORT 3306
SetEnv DB_USERNAME accounting_app
SetEnv DB_PASSWORD secret
SetEnv DB_DATABASE accounting_dev
```
## Deployment dan rollback
1. Deploy ke staging dan jalankan `composer install --no-dev --optimize-autoloader` untuk build production.
2. Jalankan lint, dependency audit, login, logout, seluruh AJAX CRUD utama, upload, export, webhook, dan cron melalui CLI.
3. Ambil backup production tepat sebelum deployment.
4. Deploy source terlebih dahulu; migration baru hanya dijalankan setelah backup tervalidasi.
5. Jika smoke test gagal, kembalikan source release sebelumnya. Restore database hanya jika migration/transaksi deployment telah mengubah data.
## Aturan endpoint
- `Auth` adalah endpoint publik untuk login/logout.
- `AttendanceWebhook` publik khusus perangkat yang serialnya terdaftar dan dikecualikan dari CSRF.
- `Cronjob` hanya dapat dijalankan melalui PHP CLI.
- `Dbcompare` hanya untuk Admin, nonaktif secara default, dan seluruh koneksinya berasal dari environment.
- Controller bisnis harus mewarisi `MY_Controller`; controller admin penuh dapat mewarisi `MY_Admin_Controller`.
## Upload dan data pribadi
- File baru di `uploads/karyawan` dan background hasil upload tidak boleh ditambahkan ke Git.
- File lama yang sudah terlanjur tracked perlu dikeluarkan dari Git index pada perubahan repository terpisah, setelah backup dan pemeriksaan dampak deployment.
- Untuk production berskala besar, pindahkan upload ke private object storage dan berikan akses melalui endpoint terotorisasi.
## Database migration
Folder `application/migrations` telah disiapkan. Baseline migration harus dibuat dari schema production yang sudah diverifikasi dan tidak boleh dijalankan otomatis sebelum perbandingan staging selesai.
## Verifikasi minimum
- Request tanpa login ke controller bisnis menghasilkan redirect atau HTTP 401 untuk AJAX.
- Login gagal lima kali terkunci selama lima menit pada session tersebut.
- POST tanpa token CSRF ditolak.
- Cron melalui browser menghasilkan HTTP 403.
- Dbcompare nonaktif menghasilkan HTTP 404.
- Upload script ke folder upload tidak dapat dieksekusi.
- `composer audit --locked` tidak melaporkan advisory pada dependency production.