Launching a website without a security review is like leaving your front door open. Use this 20-point checklist to catch vulnerabilities before attackers do.
Anay Pandya
1,529 words
Anay Pandya
Founder of ZeriFlow · 10 years fullstack engineering · About the author
Key Takeaways
Launching a website without a security review is one of the most common and most costly mistakes teams make. Every week, new breaches make headlines because basic security measures were overlooked during development or deployment. The fixes are almost always simple. The damage from skipping them is not.
<div class="zf-stat-callout" style="background:#0d1117;border:1px solid rgba(16,185,129,0.25);border-left:3px solid #10b981;border-radius:4px;padding:16px 20px;margin:24px 0"> <p style="margin:0 0 4px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:0.15em;color:#10b981;font-family:monospace">ZeriFlow Data — 12,400+ sites analyzed</p> <p style="margin:0;font-size:13px;color:#e2e8f0;line-height:1.6;font-family:monospace">In our analysis of 12,400+ sites scanned on ZeriFlow, 64% lack a Content-Security-Policy header — and of those that have one, 71% use 'unsafe-inline', negating XSS protection entirely.</p> </div>
Is your site actually secure?
Keep reading
Run a free check — 60 seconds
This checklist covers the 20 most important security checks you should complete before any website launch. Each item is practical, actionable, and can be verified without specialized security expertise. Work through the list systematically and you will eliminate the vulnerabilities that attackers exploit most often.
Every page, asset, API endpoint, and resource on your site must be served over HTTPS. Configure your server to redirect all HTTP requests to HTTPS with a 301 permanent redirect.
Verify that:
Disable TLS 1.0 and TLS 1.1 in your server configuration. These versions have known vulnerabilities and are no longer supported by modern browsers.
Configure strong cipher suites that use ECDHE key exchange and AEAD encryption (AES-GCM or ChaCha20-Poly1305). Remove all CBC-mode, DES, 3DES, and RC4 ciphers.
Define a strict CSP that limits which sources can serve scripts, styles, images, and other resources. Start with default-src 'self' and add exceptions only as needed.
Use Content-Security-Policy-Report-Only during development to identify what would break before enforcing the policy in production.
Add the Strict-Transport-Security header with a max-age of at least one year, includeSubDomains, and preload. This prevents SSL stripping attacks and signals browsers to always use HTTPS.
These three headers take seconds to add and block entire classes of attacks:
X-Content-Type-Options: nosniff — prevents MIME-type sniffingX-Frame-Options: DENY — prevents clickjackingReferrer-Policy: strict-origin-when-cross-origin — prevents referrer information leakageEvery cookie set by your application should have these flags:
Secure — only send over HTTPSHttpOnly — prevent JavaScript access (for session cookies)SameSite=Lax or SameSite=Strict — prevent cross-site request forgeryReview third-party cookies as well. Remove any that are not essential.
Every form submission and API call that modifies data must include a CSRF token. Modern frameworks (Django, Rails, Next.js, Laravel) have built-in CSRF protection, but you must verify it is actually enabled and not accidentally disabled.
Test by:
Never rely solely on client-side validation. Every input from users, APIs, and external systems must be validated on the server:
Never concatenate user input into SQL queries. Use parameterized queries or prepared statements for every database interaction.
Review your ORM queries as well. Some ORM methods allow raw SQL injection if used incorrectly. Search your codebase for any raw query methods and verify they use parameter binding.
Every piece of user-generated content displayed in your application must be properly encoded for its context:
Use your framework''s built-in template escaping. Never insert raw user input into HTML with methods like innerHTML or dangerouslySetInnerHTML without sanitization.
Require passwords of at least 12 characters. Implement rate limiting on login attempts. Support multi-factor authentication (MFA) and strongly encourage or require it for admin accounts.
If your application accepts file uploads:
Stack traces, database errors, and internal paths must never be exposed to users. Configure your application to:
Log these events at minimum:
Ensure logs do not contain sensitive data (passwords, tokens, credit card numbers). Send logs to a centralized system and set up retention policies.
Configure alerts for:
Run dependency vulnerability scans before launch:
npm audit for Node.js projectspip audit or safety check for Python projectsRemove unused dependencies. Pin dependency versions. Review changelogs before updating.
Before launch, confirm that:
DNSSEC prevents DNS spoofing attacks by cryptographically signing DNS records. Enable it through your DNS provider.
CAA records specify which certificate authorities are allowed to issue certificates for your domain. This prevents unauthorized certificate issuance.
yourdomain.com. CAA 0 issue "letsencrypt.org"
yourdomain.com. CAA 0 iodef "mailto:security@yourdomain.com"Also configure email security records:
Rate limiting prevents brute force attacks, credential stuffing, and API abuse. Apply rate limits to:
Incident response plan — document a simple playbook before you need it:
Going through this checklist manually for every launch is time-consuming and error-prone. ZeriFlow''s free scan automates the verification of most items on this list, including:
Run a scan before every launch, after every major deployment, and on a regular schedule to catch configuration drift.
For teams that need continuous monitoring, ZeriFlow Pro provides unlimited quick scans and advanced scanning with detailed expert-level recommendations.
Security is not a one-time task. It is an ongoing practice. But getting the fundamentals right before launch prevents the vast majority of common attacks and gives your team a solid foundation to build on.
<!-- zf-internal-links -->
Related resources
Website Vulnerability Scanner
Run a broader website security audit across headers, TLS, DNS, cookies, SEO, and disclosure checks.
Security Headers Checker
Check CSP, HSTS, X-Frame-Options, and other response headers.
SSL Checker
Review TLS certificate, HTTPS, and transport security signals.
DMARC Checker
Validate email authentication records for domain spoofing protection.
CSP Checker
Review Content-Security-Policy coverage and common gaps.
January 24, 2026
Website Security for Digital Agencies: Protect Your Clients and Your Business
Monitor your security score
Schedule recurring scans and catch regressions after deployments.