Website Security Audit Checklist: 40 Checks You Can Run Today
A step-by-step security audit checklist covering TLS, headers, DNS, content, and more. Copy this list, work through it, and harden your site in an afternoon.

Running a security audit on your website doesn't require a penetration tester or a six-figure budget. Most vulnerabilities come from misconfiguration, not sophisticated attacks. This checklist covers 40 checks you can run yourself — organized by category so you can work through them systematically.
How to Use This Checklist
Work through each section in order. For each item, check whether your site passes or fails. If it fails, follow the fix instructions. Most items take under 5 minutes to resolve. If you want to automate this entire process, run a free SecScanner audit that covers all 40+ checks instantly.
TLS / HTTPS (8 Checks)
- HTTPS enabled: Your site should load over
https://. If it doesn't, get a free certificate from Let's Encrypt. This is non-negotiable in 2026. - HTTP redirects to HTTPS: Visit
http://yoursite.com— it should 301-redirect tohttps://. If it serves content over HTTP, users and search engines can access the insecure version. - TLS 1.2+ only: Disable TLS 1.0 and 1.1. These protocols have known vulnerabilities. Use
openssl s_client -connect yoursite.com:443to check supported versions. - Certificate not expired: Check your certificate expiry date. Set up monitoring to alert you 30 days before expiration. Let's Encrypt certificates last 90 days — automate renewal.
- Certificate chain valid: Your server should send the full certificate chain (leaf + intermediate). Missing intermediates cause trust errors on some devices.
- No mixed content: Open DevTools console and look for mixed content warnings. Every resource (images, scripts, stylesheets, fonts) should load over HTTPS.
- HSTS header set: Add
Strict-Transport-Security: max-age=31536000; includeSubDomainsto force HTTPS for all future visits. This prevents SSL stripping attacks. - Strong cipher suites: Disable weak ciphers (RC4, DES, 3DES). Modern configurations should prefer ECDHE key exchange and AES-GCM encryption.
HTTP Security Headers (10 Checks)
- Content-Security-Policy: Define which sources can load scripts, styles, images, and other resources. Start with report-only mode:
Content-Security-Policy-Report-Only: default-src 'self'. - X-Content-Type-Options: Set
X-Content-Type-Options: nosniffto prevent browsers from MIME-sniffing responses away from the declared content type. - X-Frame-Options: Set
X-Frame-Options: DENY(orSAMEORIGIN) to prevent your site from being embedded in iframes — the primary defense against clickjacking. - Referrer-Policy: Set
Referrer-Policy: strict-origin-when-cross-originto control how much URL information is shared when users navigate away from your site. - Permissions-Policy: Disable browser features you don't use:
Permissions-Policy: camera=(), microphone=(), geolocation=(). This limits what malicious scripts can access. - X-XSS-Protection: Set
X-XSS-Protection: 0. The legacy XSS filter is disabled in modern browsers and can actually introduce vulnerabilities. Turn it off explicitly. - No Server header leaking: Remove or obscure the
Serverresponse header. Advertising "Apache/2.4.51" or "nginx/1.21.6" tells attackers exactly which exploits to try. - No X-Powered-By header: Remove
X-Powered-By. Frameworks like Express, PHP, and ASP.NET set this by default. It reveals your tech stack to attackers. - CORS configured correctly: If you use CORS, ensure
Access-Control-Allow-Originis not set to*for authenticated endpoints. Restrict it to trusted domains. - Cache-Control for sensitive pages: Set
Cache-Control: no-storeon pages containing user data to prevent them from being cached by shared proxies or browsers.
DNS and Email Security (8 Checks)
- SPF record: Add a TXT record like
v=spf1 include:_spf.google.com -allto specify which servers can send email from your domain. - DKIM signing: Configure DKIM to cryptographically sign outgoing emails. This proves emails actually came from your domain.
- DMARC policy: Add a DMARC record:
v=DMARC1; p=reject; rua=mailto:dmarc@yoursite.com. This tells receiving servers to reject spoofed emails. - DNSSEC enabled: Enable DNSSEC through your domain registrar. This prevents DNS spoofing and cache poisoning attacks.
- CAA records: Add CAA DNS records to specify which Certificate Authorities can issue certificates for your domain. This prevents unauthorized certificate issuance.
- No subdomain takeover risk: Audit all DNS CNAME records. If they point to decommissioned services (old Heroku apps, deleted S3 buckets), attackers can claim them.
- MTA-STS configured: Set up MTA-STS to enforce TLS encryption for incoming email. Without it, email can be silently downgraded to plaintext.
- security.txt file: Create
/.well-known/security.txtwith contact information for security researchers. This is an internet standard (RFC 9116).
Content Security (8 Checks)
- No vulnerable JavaScript libraries: Check your JS dependencies against known vulnerability databases (Snyk, npm audit). Outdated jQuery, Lodash, or Bootstrap versions are common culprits.
- No exposed admin panels: Test common admin paths (
/admin,/wp-admin,/phpmyadmin). If they're accessible, restrict them by IP or add additional authentication. - No sensitive files exposed: Check for
/.env,/.git/config,/wp-config.php,/backup.sql. These files should never be publicly accessible. - No open redirects: Test URL parameters like
?redirect=https://evil.com. If your site redirects to arbitrary URLs, attackers can use it for phishing. - No directory listing: Navigate to directories on your server. If you see a file listing instead of a 403/404, disable
Options +Indexesin your web server config. - CSRF protection: Verify that state-changing forms include CSRF tokens. Modern frameworks handle this automatically, but custom forms may not.
- Subresource Integrity: Add
integrityattributes to<script>and<link>tags loading from CDNs. This ensures the files haven't been tampered with. - No information leakage in errors: Trigger errors on your site and check the response. Stack traces, database details, or file paths should never be exposed to users.
Cookie Security (3 Checks)
- Secure flag: All cookies should have the
Secureflag so they're only sent over HTTPS connections. - HttpOnly flag: Session cookies should have
HttpOnlyto prevent JavaScript from reading them — the primary defense against session theft via XSS. - SameSite attribute: Set
SameSite=Lax(orStrict) on cookies to prevent them from being sent on cross-site requests, mitigating CSRF attacks.
Quick Wins vs. Deep Fixes
Not all items on this list are equal. Here's how to prioritize:
Fix immediately (5 minutes each):
- Enable HTTPS and redirect HTTP
- Add X-Content-Type-Options, X-Frame-Options, Referrer-Policy headers
- Remove Server and X-Powered-By headers
- Set cookie security flags
Fix this week (30 minutes each):
- Configure SPF, DKIM, DMARC for email
- Set up HSTS with a long max-age
- Audit and update vulnerable JS libraries
- Add CSP in report-only mode
Fix this month (requires planning):
- Enable DNSSEC
- Audit all subdomains for takeover risk
- Implement SRI for all CDN resources
- Configure MTA-STS
Automate Your Security Audits
Running through 40 checks manually takes hours. SecScanner automates all of these checks in seconds — enter your URL and get a complete security report with specific fix instructions for every issue found. The free tier covers 24 checks; the paid tier covers all 58.
Security is not a one-time task. Run this checklist (or an automated scan) every time you deploy major changes, add new services, or update your infrastructure. The threats evolve — your defenses should too.
Related Articles
Check Your Website Security
Want to see how your website measures up? Run a free security scan with SecScanner to identify vulnerabilities and get actionable remediation guidance.
Scan Your Website Free