Files
accounting_dev_v2/docs/TAHAP-0-1.md
T
2026-09-11 16:03:00 +07:00

3.2 KiB
Raw Blame History

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:

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.