Cybrove
Platform Guide

How to Add Security Headers to Caddy

Add CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, and Permissions-Policy to Caddy. Copy-paste configuration included.

The 6 Essential Security Headers

Content-Security-Policy (CSP)

Controls which sources of scripts, styles, and resources are allowed. Prevents XSS by blocking inline scripts and unauthorized external scripts.

Strict-Transport-Security (HSTS)

Forces browsers to always use HTTPS, preventing protocol downgrade attacks and cookie hijacking over HTTP.

X-Frame-Options

Prevents your page from being loaded in an iframe, blocking clickjacking attacks.

X-Content-Type-Options

Prevents browsers from MIME-sniffing the content type, stopping attacks that rely on content type confusion.

Referrer-Policy

Controls how much referrer information is sent with requests, protecting user privacy and preventing information leakage.

Permissions-Policy

Controls which browser features (camera, microphone, geolocation) your page can use, reducing attack surface.

Caddy Configuration

Add this to Caddyfile in your Caddy configuration directory (typically /etc/caddy/Caddyfile):

# Caddyfile
yourdomain.com {
    # Security headers
    header {
        X-Frame-Options "DENY"
        X-Content-Type-Options "nosniff"
        Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
        Referrer-Policy "strict-origin-when-cross-origin"
        Permissions-Policy "camera=(), microphone=(), geolocation=()"
        Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline';"
        X-XSS-Protection "1; mode=block"
        -Server  # Remove Server header
    }
    
    reverse_proxy localhost:3000
}

Caddy automatically provides HTTPS via Let's Encrypt — no certificate management needed. Use -Server to remove the Server header. The header directive applies to all responses. Reload after changes: sudo systemctl reload caddy

How to Test Your Headers

curl -I https://yourdomain.com

Or use Cybrove's free security check to automatically validate all security headers and get specific fix recommendations.

Frequently Asked Questions

How do I add security headers to Caddy?

Add security headers to Caddy by modifying Caddyfile in your Caddy configuration directory (typically /etc/caddy/Caddyfile). The essential headers are CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, and Permissions-Policy. See the configuration example above.

How do I test if my Caddy security headers are working?

Run: curl -I https://yourdomain.com and check the response headers. Or use Cybrove's free security check at cybrove.com/scan which automatically validates all security headers and reports which are missing.

Which security headers are most important for Caddy?

CSP (prevents XSS), HSTS (forces HTTPS), and X-Frame-Options (prevents clickjacking) are the most critical. X-Content-Type-Options and Referrer-Policy provide additional protection with minimal configuration effort.

Check if your Caddy headers are configured correctly

Free security check validates all 6 headers plus SSL, DNS, and email authentication.

Free Security Check