Security Checklist untuk Deploy — Security

Security Checklist Sebelum Deploy Sebelum mendeploy aplikasi ke production, pastikan semua aspek keamanan sudah dicek. Checklist ini membantu memastikan tidak…

Security checklist adalah daftar hal yang harus benar sebelum aplikasi naik ke production. Bayangin pilot sebelum terbang: walau sudah ribuan jam di udara, dia tetap membaca checklist pre-flight satu per satu. Bukan karena lupa caranya, tapi karena kesalahan paling berbahaya justru hal yang kamu "tahu" lalu kelewat di saat yang salah. Checklist deploy bekerja sama: tiap baris dicek, gak ada yang dianggap "pasti udah".

🧪 Tebakan cepat: sebuah aplikasi HTTPS-nya mati dan password-nya di-hash pakai sha1, sisanya aman. Berapa skornya di securityAudit: 25, 50, atau 70? Tebak dulu, jawabannya ada di bagian "Checklist jadi kode: securityAudit".

Isi checklist sebelum deploy

Hampir semua baris di checklist ini sudah kamu pelajari di jalur keamanan. Di sini semuanya dikumpulkan jadi satu daftar:

Area Yang dicek Pelajarannya
Login password di-hash bcrypt atau Argon2 Password Hashing & Storage
Login cookie session HttpOnly, Secure, SameSite Cookie Security
Login rate limit di endpoint login Rate Limiting & Throttling
Login 2FA, minimal untuk akun admin pelajaran ini, di bawah
Akses tiap endpoint sensitif mengecek otorisasi di server OWASP Top 10
Input semua input divalidasi di server Input Validation & Schema
Input query pakai parameter, bukan string disambung SQL Injection Prevention
Output output di-escape sesuai konteks XSS Prevention & Sanitization
Form CSRF protection aktif CSRF (Cross-Site Request Forgery)
HTTP HTTPS di mana-mana, plus HSTS HTTPS & TLS Basics
HTTP security headers (CSP, nosniff, frame-ancestors) Security Headers Lengkap
HTTP CORS cuma mengizinkan origin yang jelas, bukan * CORS Deep Dive
Server APP_DEBUG=false, pesan error umum Sensitive Data Exposure
Secret .env gak di-commit, secret di secret manager Environment Variables & Secrets
Dependency npm audit atau composer audit bersih Dependency Vulnerabilities
Operasional backup sudah dicoba restore, monitoring dan alert nyala Security Logging & Monitoring

Checklist jadi kode: securityAudit

Checklist di kertas gampang di-centang tanpa dicek. Lebih aman kalau sebagian dicek oleh kode. Di latihan, kamu bikin fungsi securityAudit(config) yang menilai lima baris checklist dari object konfigurasi, mulai dari skor 100:

Kalau Kurangi Issue
https false 25 "HTTPS not enabled"
debug true 20 "Debug mode is on"
csrfProtection false 20 "CSRF protection disabled"
passwordHashing bukan "bcrypt" atau "argon2" 25 "Weak password hashing"
corsOrigin sama dengan "*" 10 "CORS wildcard origin"
function securityAudit(config) {
  let score = 100;
  const issues = [];

  if (!config.https) { score -= 25; issues.push("HTTPS not enabled"); }
  if (config.debug) { score -= 20; issues.push("Debug mode is on"); }
  if (!config.csrfProtection) { score -= 20; issues.push("CSRF protection disabled"); }
  if (config.passwordHashing !== "bcrypt" && config.passwordHashing !== "argon2") {
    score -= 25;
    issues.push("Weak password hashing");
  }
  if (config.corsOrigin === "*") { score -= 10; issues.push("CORS wildcard origin"); }

  return { score: Math.max(0, score), issues };
}

Ini hasilnya pada empat konfigurasi yang dipakai latihan (Lab memakai fungsi yang sama):

Konfigurasi Masalah Hasil
semua aman, bcrypt, CORS https://myapp.com tidak ada { score: 100, issues: [] }
HTTPS mati, debug nyala, CSRF mati, md5, CORS * lima-limanya skor 0
semua aman, argon2, CORS * CORS skor 90
HTTPS mati, sha1, sisanya aman HTTPS, hashing skor 50

HTTPS mati (kurangi 25) dan sha1 (kurangi 25) bikin 100 jadi 50. Itu jawaban tebakannya.

Password, 2FA, dan "never trust user input"

⚠️ Jebakan yang sering ketemu

TL;DR: Security checklist adalah daftar yang dicek sebelum tiap deploy: hashing bcrypt/Argon2, cookie aman, rate limit dan 2FA, otorisasi di server, validasi input, query berparameter, output di-escape, CSRF, HTTPS dan security headers, CORS tanpa *, debug mati, secret gak di-commit, dependency diaudit, backup dan monitoring. securityAudit mulai dari 100 lalu mengurangi 25 (HTTPS), 20 (debug), 20 (CSRF), 25 (hashing selain bcrypt/argon2), dan 10 (CORS *), dengan lima if terpisah dan Math.max(0, score). Never trust user input, password minimal 8 karakter menurut NIST (15 kalau tanpa faktor kedua), dan 2FA bikin password bocor saja gak cukup.

Yang akan kamu pelajari