How to use this checklist
Work through each category methodically. Items marked Critical are vulnerabilities that attackers actively look for in the first minutes of probing an application — fix these before anything else. High items have direct security impact and should be resolved before launch. Medium items are meaningful but typically require specific conditions to exploit.
This list covers the most consistently exploitable vulnerability classes. It is not exhaustive — business logic vulnerabilities specific to your application require manual review or automated simulation beyond a checklist.
Authentication & Session Management
Passwords hashed with bcrypt, scrypt, or Argon2 — not MD5, SHA1, or plain SHA256
CriticalLogin endpoint rate-limited — brute force requires more than a few thousand requests
HighAccount lockout or CAPTCHA after repeated failed logins
HighSession tokens are cryptographically random — not sequential or predictable
CriticalSession invalidated on logout — not just deleted client-side
HighSession invalidated after password change
HighSession cookie has HttpOnly flag — not readable by JavaScript
HighSession cookie has Secure flag — only sent over HTTPS
HighSession cookie has SameSite=Strict or Lax — CSRF protection
MediumPassword reset tokens are single-use and expire within 1 hour
HighPassword reset tokens are invalidated after use — not reusable
HighMulti-factor authentication available for privileged accounts
MediumAuthorization & Access Control
Every API endpoint verifies the requesting user owns the accessed resource (IDOR check)
CriticalAdmin-only endpoints return 403 for non-admin users — not 404 or 200 with empty data
CriticalAuthorization checked server-side — not based on client-supplied role or flag
CriticalHorizontal privilege: User A cannot access User B's data by changing an ID
CriticalVertical privilege: Regular users cannot access admin functionality by direct URL
CriticalInactive or deleted users' data is inaccessible — not just hidden from the UI
HighAPI endpoints that accept a user ID in the request body validate it against the authenticated session
HighInput Validation & Injection
SQL queries use parameterized queries or prepared statements — no string concatenation
CriticalAll user input rendered in HTML is output-encoded — no raw innerHTML with user data
HighFile uploads validate MIME type server-side — not just the file extension
HighFile upload filenames are sanitized or replaced before storage
HighUploaded files are not directly executable — stored outside web root or behind a CDN
CriticalXML parsing has external entity processing disabled (XXE prevention)
HighServer-side template rendering uses safe context — no user input evaluated as template code
CriticalCommand execution functions do not include user-supplied input without strict allowlist validation
CriticalRedirect targets are validated against an allowlist — open redirects blocked
MediumAPI Security
All API endpoints require authentication — no accidentally public endpoints
CriticalAPI rate limiting in place — bulk data extraction requires unusual request volume
HighGraphQL introspection disabled in production
MediumGraphQL query depth and complexity limits set — no unbounded nested queries
MediumCORS policy is restrictive — wildcard (*) origin not used with credentialed requests
HighAPI versioning in place — deprecated endpoints return 410 Gone, not live responses
LowError responses do not include stack traces, SQL errors, or internal paths
MediumJWT tokens validated server-side — algorithm, expiry, and signature all checked
CriticalJWT secret is strong and rotated — not a default or weak value
CriticalSensitive Data Exposure
All data in transit encrypted with TLS 1.2+ — no HTTP endpoints for authenticated routes
CriticalHSTS header set — browsers enforce HTTPS for all future visits
HighSensitive data (passwords, tokens, keys) not logged — check application logs
HighAPI responses return only necessary fields — no accidental user data leakage in bulk endpoints
HighDatabase connection strings and API keys not in version control or client-side code
CriticalBackup files and old deployments not accessible via predictable URLs
HighDebug mode disabled in production — no verbose error pages
MediumDirectory listing disabled on all web servers
MediumInfrastructure & Configuration
Default credentials changed on all services — databases, admin panels, cloud consoles
CriticalUnnecessary services and ports closed — attack surface minimized
HighSecurity headers set: X-Frame-Options, X-Content-Type-Options, Referrer-Policy
MediumContent Security Policy defined — inline scripts restricted or eliminated
MediumDependency vulnerabilities scanned — no known CVEs in production dependencies
HighCloud storage buckets not publicly readable unless intentionally public
CriticalInternal admin interfaces not exposed to the public internet
CriticalSubdomains enumerated and secured — forgotten staging environments removed
MediumWhat this checklist doesn't cover
A checklist tests for known patterns. It will not find vulnerabilities that are specific to your application's business logic — a price manipulation flaw in your checkout, a workflow bypass in your approval process, or an access control gap that only makes sense given how your users are structured.
It also won't catch every injection variant, every authentication edge case, or every way a combination of individually-acceptable behaviors creates a vulnerability when chained together. For that you need either a manual penetration tester or an automated simulation that actually attempts exploit paths rather than checking for known signatures.
Checklist
Known patterns, configuration checks, code review items. Fast to run, easy to understand.
Misses novel chains and business logic
Automated simulation
Actively attempts exploit paths, confirms impact with HTTP evidence, runs in minutes.
Limited on bespoke business logic
Manual pentest
Human reasoning across trust boundaries, creative chaining, compliance-grade reports.
Expensive, point-in-time only
Run the automated checks in minutes
Nautillo Pro automatically tests for the Critical and High items in this checklist — injection vulnerabilities, authentication weaknesses, access control failures, and API security issues — against your live application. Every confirmed finding includes HTTP proof. Free to start, no credit card required.