Most websites are insecure not because security is hard, but because nobody made a checklist. These twenty-three items prevent 95% of real-world attacks. None of them require a security specialist — your developer should be doing all of them already.
Authentication and sessions
- Passwords hashed with bcrypt or argon2 (never MD5/SHA1).
- Rate limiting on login endpoint (5 attempts per minute).
- 2FA available, mandatory for admin accounts.
- Session cookies HttpOnly, Secure, SameSite=Lax.
- Sessions invalidated on password change and logout.
- Password reset tokens expire in 30 minutes.
Input validation
- All user input validated server-side (client validation is UX, not security).
- SQL injection prevented via parameterized queries / Eloquent / Prisma.
- XSS prevented via proper output encoding.
- CSRF tokens on all state-changing requests.
- File uploads scanned, type-checked, size-limited, stored outside web root.
Transport and storage
- HTTPS everywhere with HSTS preload.
- TLS 1.2 minimum (1.3 preferred).
- Sensitive data encrypted at rest.
- Secrets in environment variables, never in code.
- Database backups encrypted and tested quarterly.
Headers and policies
- Content-Security-Policy header configured.
- X-Content-Type-Options: nosniff.
- X-Frame-Options: SAMEORIGIN.
- Referrer-Policy: strict-origin-when-cross-origin.
Operational
- Dependencies updated monthly. Use Dependabot or Renovate.
- Logs structured and shipped to a separate system (logs are evidence in a breach).
- Incident response plan written before you need it.
If your site fails any of these, book a security review. I deliver a written report with prioritized fixes within 1 week.
Ready to Start Your Project?
If this article was helpful, imagine what we could do together. Get a free 30-minute consultation and an honest recommendation for your project — no sales pitch.
Book Free Consultation