63 lines
3.2 KiB
Markdown
63 lines
3.2 KiB
Markdown
# 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.
|