Security Headers Lengkap — Security

HTTP Security Headers Security headers adalah instruksi dari server ke browser tentang bagaimana menangani konten. Headers yang tepat bisa mencegah banyak jenis

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

Checklist Headers

Yang akan kamu pelajari