3.2 KiB
3.2 KiB
Tahap 0–1: Persiapan dan Keamanan
Dokumen ini adalah checklist deployment untuk fondasi keamanan accounting_dev.
Sebelum deploy
- Backup database dan folder
uploads, lalu lakukan uji restore di staging. - Rotasi seluruh password database yang pernah tersimpan di repository/source lama.
- Konfigurasikan environment berdasarkan
.env.examplemelalui ApacheSetEnv, virtual host, container, atau secret manager. File.envtidak dibaca otomatis oleh aplikasi. - Gunakan
CI_ENV=production, URL HTTPS,COOKIE_SECURE=true, dan encryption key acak minimal 32 karakter pada production. - Isi
ATTENDANCE_ALLOWED_SERIALSdengan serial mesin yang sah. - Biarkan
DBCOMPARE_ENABLED=falsekecuali saat diagnosis terkontrol oleh Admin. - Pastikan web server dapat menulis
application/logs, folder session PHP, danuploads, tetapi tidak dapat mengeksekusi PHP dariuploads.
Contoh konfigurasi Apache development:
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
- Deploy ke staging dan jalankan
composer install --no-dev --optimize-autoloaderuntuk build production. - Jalankan lint, dependency audit, login, logout, seluruh AJAX CRUD utama, upload, export, webhook, dan cron melalui CLI.
- Ambil backup production tepat sebelum deployment.
- Deploy source terlebih dahulu; migration baru hanya dijalankan setelah backup tervalidasi.
- Jika smoke test gagal, kembalikan source release sebelumnya. Restore database hanya jika migration/transaksi deployment telah mengubah data.
Aturan endpoint
Authadalah endpoint publik untuk login/logout.AttendanceWebhookpublik khusus perangkat yang serialnya terdaftar dan dikecualikan dari CSRF.Cronjobhanya dapat dijalankan melalui PHP CLI.Dbcomparehanya untuk Admin, nonaktif secara default, dan seluruh koneksinya berasal dari environment.- Controller bisnis harus mewarisi
MY_Controller; controller admin penuh dapat mewarisiMY_Admin_Controller.
Upload dan data pribadi
- File baru di
uploads/karyawandan 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 --lockedtidak melaporkan advisory pada dependency production.