HTTP Security Headers
Security headers adalah instruksi dari server ke browser tentang bagaimana menangani konten. Headers yang tepat bisa mencegah banyak jenis serangan tanpa perubahan kode.
1. Strict-Transport-Security (HSTS)
Memaksa browser selalu menggunakan HTTPS:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
// max-age: durasi dalam detik (1 tahun)
// includeSubDomains: berlaku untuk semua subdomain
// preload: daftarkan ke HSTS preload list browser
2. Content-Security-Policy (CSP)
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-random'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; frame-ancestors 'none'
3. X-Content-Type-Options
Mencegah browser menebak MIME type (MIME sniffing):
X-Content-Type-Options: nosniff
// Browser harus menghormati Content-Type yang diberikan server
4. X-Frame-Options
X-Frame-Options: DENY // Tidak boleh di-embed di iframe
X-Frame-Options: SAMEORIGIN // Hanya boleh di-embed dari origin yang sama
5. Referrer-Policy
Mengontrol informasi referer yang dikirim saat navigasi:
// Kirim origin saja (tanpa path) saat cross-origin
Referrer-Policy: strict-origin-when-cross-origin
// Opsi lain:
// no-referrer — tidak kirim referer sama sekali
// same-origin — kirim referer hanya untuk same-origin
// origin — kirim origin saja (tanpa path)
6. Permissions-Policy
// Kontrol akses ke fitur browser
Permissions-Policy: camera=(), microphone=(), geolocation=(self), payment=(self)
// camera dan microphone diblokir total
// geolocation dan payment hanya untuk origin sendiri
Implementasi di Berbagai Platform
// Express.js — menggunakan Helmet
const helmet = require("helmet");
app.use(helmet());
// Laravel — middleware
// app/Http/Middleware/SecurityHeaders.php
public function handle($request, $next)
{
$response = $next($request);
$response->headers->set("X-Content-Type-Options", "nosniff");
$response->headers->set("X-Frame-Options", "DENY");
$response->headers->set("Referrer-Policy", "strict-origin-when-cross-origin");
$response->headers->set("Permissions-Policy", "camera=(), microphone=()");
return $response;
}
// Nginx
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
Testing Security Headers
- securityheaders.com — Scan gratis, memberikan grade A-F
- Mozilla Observatory — Tool dari Mozilla untuk audit security
- Browser DevTools — Network tab → Response Headers
Checklist Headers
- HSTS — Wajib untuk semua website HTTPS
- CSP — Wajib, mulai dari report-only
- X-Content-Type-Options — Selalu set nosniff
- X-Frame-Options — DENY kecuali perlu embedding
- Referrer-Policy — strict-origin-when-cross-origin
- Permissions-Policy — Batasi fitur yang tidak digunakan