Securing APIs

1. Using HTTPS/TLS

SettingRecommendation
TLS version1.2 minimum, 1.3 preferred
Cipher suitesForward secrecy (ECDHE)
HSTSStrict-Transport-Security: max-age=31536000; includeSubDomains
CertificateLet's Encrypt (free), commercial CA, ACME automation
DisableSSL 3.0, TLS 1.0/1.1, weak ciphers

2. Validating Input Data

ThreatDefense
SQL injectionParameterized queries
NoSQL injectionType validation, reject operators
XSS (returned in HTML)Output encoding, CSP
XML injection / XXEDisable DTD processing
SSRFAllowlist outbound URLs
Mass assignmentAllowlist DTO fields

3. Implementing CSRF Protection

DefenseUse With
SameSite cookiesSameSite=Lax default; Strict for sensitive
CSRF token (synchronizer)Form-based; verify on POST
Double-submit cookieStateless variant
Custom headerJS sets X-CSRF-Token; CORS prevents cross-origin
Bearer tokensImmune (no cookie auto-send)

4. Using Secure Headers

HeaderValue
Strict-Transport-Securitymax-age=31536000; includeSubDomains; preload
Content-Security-Policydefault-src 'self'; frame-ancestors 'none'
X-Content-Type-Optionsnosniff
X-Frame-OptionsDENY
Referrer-Policystrict-origin-when-cross-origin
Permissions-Policygeolocation=(), microphone=()

5. Implementing API Key Rotation

PracticeReason
Allow multiple active keysZero-downtime rotation
Per-key expirationForce periodic rotation
Audit logs per keyTrack usage, detect leak
Auto-revoke leaked keysDetect via secret scanning

6. Avoiding Sensitive Data in URLs

Warning: URLs are logged in: server access logs, browser history, referrer headers, proxy logs, analytics. Never put: tokens, passwords, PII, API keys.
BadGood
?token=abc123Authorization: Bearer abc123
?password=...POST body
?ssn=123-45-6789POST body, encrypted

7. Implementing IP Whitelisting

Use CaseNotes
Server-to-server APIsStatic IPs known
Admin endpointsOffice VPN range
B2B integrationsPer-tenant CIDR list
LimitationsNAT, dynamic IPs, mobile users

8. Using Security Headers

API-Specific HeaderValue
Cache-Controlno-store for sensitive responses
Pragmano-cache (HTTP/1.0 fallback)
Expect-CT DEPRECATEDCert Transparency now mandatory in browsers

9. Implementing Request Signing

Example: HMAC Request Signing

// Canonical string: METHOD\nPATH\nTIMESTAMP\nBODY_HASH
String canonical = req.getMethod() + "\n" + req.getPath() + "\n"
    + timestamp + "\n" + sha256(req.getBody());
String signature = hmacSha256(canonical, secretKey);

// Headers
req.setHeader("X-Timestamp", timestamp);
req.setHeader("X-Signature", "v1=" + signature);

// Server: reject if timestamp is > 5 min old, or signature mismatches

10. Logging Security Events

EventLog Level
Failed loginWARN
Account lockoutWARN
Permission deniedWARN
Token issued/revokedINFO
Suspicious patternsALERT
API key created/deletedAUDIT

11. Implementing DDoS Protection

LayerMitigation
Network (L3/L4)Cloudflare, AWS Shield, BGP scrubbing
Application (L7)Rate limiting, WAF rules, bot detection
AuthCAPTCHA after threshold
CachingCDN absorbs static traffic
Auto-scalingAbsorb sustained surges

12. Conducting Security Audits

Audit TypeFrequency
OWASP API Top 10 reviewAnnual
Penetration testAnnual + major releases
Dependency scan (SCA)Continuous (Dependabot, Snyk)
Static analysis (SAST)Per commit
Dynamic analysis (DAST)Per release
Secrets scanningPer commit (gitleaks, trufflehog)