Keamanan Aplikasi Web: OWASP Top 10 dan Cara Mengatasinya
Keamanan adalah aspek yang tidak boleh diabaikan dalam pengembangan aplikasi web. OWASP Top 10 adalah daftar 10 risiko keamanan paling kritis yang harus dipahami setiap developer.
1. Broken Access Control
Masalah: User bisa mengakses resource yang bukan haknya.
Solusi:
// Selalu validasi ownership
async function getPost(postId: string, userId: string) {
const post = await prisma.post.findUnique({
where: { id: postId },
});
if (post?.userId !== userId) {
throw new Error('Forbidden');
}
return post;
}
2. Cryptographic Failures
Masalah: Data sensitif tidak dienkripsi dengan benar.
Solusi:
- Selalu gunakan HTTPS
- Hash password dengan bcrypt (cost factor minimal 12)
- Jangan simpan data sensitif yang tidak perlu
- Encrypt data at rest untuk PII
3. Injection (SQL, NoSQL, OS Command)
Masalah: Input user dieksekusi sebagai perintah.
Solusi:
// SALAH - vulnerable
const query = `SELECT * FROM users WHERE email = '${email}'`;
// BENAR - parameterized query (Prisma otomatis aman)
const user = await prisma.user.findUnique({
where: { email },
});
4. Insecure Design
Masalah: Arsitektur aplikasi yang tidak mempertimbangkan keamanan.
Solusi:
- Threat modeling sebelum development
- Defense in depth (multiple layers of security)
- Principle of least privilege
5. Security Misconfiguration
Masalah: Default credentials, exposed debug info, missing headers.
Solusi:
// next.config.ts - Security headers
const securityHeaders = [
{ key: 'X-Frame-Options', value: 'DENY' },
{ key: 'X-Content-Type-Options', value: 'nosniff' },
{ key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
{ key: 'X-XSS-Protection', value: '1; mode=block' },
];
6. Vulnerable Components
Masalah: Menggunakan library yang sudah diketahui vulnerable.
Solusi:
# Scan vulnerabilities
npm audit
composer audit
pip audit
7. Authentication Failures
Masalah: Lemahnya implementasi autentikasi.
Solusi:
- Implementasi rate limiting pada login
- Gunakan JWT dengan expiration yang tepat
- Implementasi 2FA untuk aksi sensitif
- Password policy yang kuat
8. Data Integrity Failures
Masalah: Tidak memvalidasi integritas data dan software.
Solusi:
- Verifikasi signature pada update
- Gunakan Content Security Policy (CSP)
- Integrity check pada CI/CD pipeline
9. Logging & Monitoring Failures
Masalah: Tidak ada log atau monitoring yang memadai.
Solusi:
- Log semua autentikasi event (login, logout, failed)
- Log akses ke data sensitif
- Setup alerting untuk aktivitas mencurigakan
- Retention policy minimal 90 hari
10. Server-Side Request Forgery (SSRF)
Masalah: Aplikasi fetch URL tanpa validasi.
Solusi:
// Validasi URL sebelum fetch
function isAllowedUrl(url: string): boolean {
const parsed = new URL(url);
const blockedHosts = ['localhost', '127.0.0.1', '0.0.0.0'];
return !blockedHosts.includes(parsed.hostname)
&& !parsed.hostname.startsWith('192.168.')
&& !parsed.hostname.startsWith('10.');
}
Checklist Keamanan
- HTTPS everywhere
- Input validation di semua endpoint
- Parameterized queries (ORM)
- Password hashing (bcrypt, argon2)
- JWT dengan expiration
- Rate limiting
- Security headers
- Regular dependency audit
- Error handling tanpa expose stack trace
- Logging dan monitoring
Kesimpulan
Keamanan bukan fitur tambahan — ini adalah fondasi. Dengan memahami dan menerapkan OWASP Top 10, Anda bisa membangun aplikasi yang jauh lebih aman.
Butuh audit keamanan untuk aplikasi Anda? Hubungi tim kami.