Web Application Security Testing Checklist for 2026
This is the checklist I wish I'd had when I started testing web applications. Not a theoretical framework โ a practical list of what to test, in what order, with what tools, and what to look for.
It's organized around the OWASP Top 10 (2021) because that's still the standard in 2026, but it goes beyond the Top 10 into areas that matter in practice: security headers, TLS configuration, API-specific testing, and supply chain concerns.
Phase 1: Reconnaissance
Before testing anything, understand what you're testing. Recon isn't optional โ it determines the scope and focus of everything that follows.
Technology Stack Identification
- โ Identify web server (Apache, Nginx, IIS, Cloudflare)
- โ Identify application framework (React, Next.js, Django, Rails, Spring)
- โ Identify backend language (response headers, error pages, file extensions)
- โ Check for WAF presence (Cloudflare, AWS WAF, Akamai, Imperva)
- โ Enumerate subdomains and virtual hosts
Endpoint Discovery
- โ Spider/crawl the application (ZAP Spider, Burp Crawler)
- โ Check for exposed API documentation (Swagger/OpenAPI at
/api-docs,/swagger.json,/openapi.json) - โ Analyze JavaScript bundles for hidden endpoints and API keys
- โ Directory brute-force common paths (
/admin,/api,/.env,/.git) - โ Check
robots.txtandsitemap.xmlfor disclosed paths
Tools: OWASP ZAP (spider), Burp Suite (crawler), ffuf (directory brute-force), Nuclei (tech detection templates). For a comparison of ZAP vs Burp, see our detailed comparison.
Phase 2: Injection Testing
Injection remains the most exploited vulnerability class. Test every user-controlled input.
SQL Injection (OWASP A03)
- โ Test all parameters (GET, POST, headers, cookies) with single quote (
') and observe error responses - โ Test error-based SQLi: look for database error signatures (MySQL, PostgreSQL, MSSQL, SQLite)
- โ Test boolean-based SQLi: compare response lengths for
AND 1=1vsAND 1=2 - โ Test time-based blind SQLi:
SLEEP(5),pg_sleep(5),WAITFOR DELAY - โ Check ORM-layer injection (parameterized queries can still be vulnerable if built with string concatenation)
For a deep dive, see Detecting SQL Injection: What Your Scanner Should Check in 2026.
Cross-Site Scripting โ XSS (OWASP A03)
- โ Test reflected XSS: inject
<script>alert(1)</script>in all parameters and check if it appears unencoded in the response - โ Test attribute injection:
" onmouseover="alert(1)in parameters reflected inside HTML attributes - โ Test DOM-based XSS: check
document.location,document.referrer,window.namesinks - โ Test stored XSS: submit payloads in forms, comments, profile fields โ check if they render for other users
- โ Check Content-Security-Policy effectiveness against XSS payloads
For a deep dive, see Detecting Reflected XSS: What Your Scanner Should Check in 2026.
Server-Side Request Forgery โ SSRF (OWASP A10)
- โ Test URL parameters for SSRF: inject
http://169.254.169.254/latest/meta-data/(AWS metadata) - โ Test for internal network access:
http://localhost,http://127.0.0.1,http://[::1] - โ Test
file://protocol:file:///etc/passwd - โ Check for DNS rebinding bypass potential
- โ Test webhook/callback URL fields โ these are common SSRF vectors
Command Injection
- โ Test parameters that might reach system commands:
; id,| id,$(id),`id` - โ Check file upload functionality for command injection via filenames
- โ Test PDF/image generation features (often shell out to external tools)
Phase 3: Authentication & Access Control
Authentication (OWASP A07)
- โ Test for username enumeration (different responses for valid vs invalid usernames)
- โ Test account lockout after failed attempts (or lack thereof)
- โ Check password policy enforcement (minimum length, complexity)
- โ Test password reset flow for token predictability and expiration
- โ Check session cookie flags:
Secure,HttpOnly,SameSite - โ Test for session fixation (does the session ID change after login?)
- โ Check JWT implementation: algorithm confusion (none/HS256), weak secrets, missing expiration
Access Control (OWASP A01)
- โ Test IDOR: change resource IDs in URLs and API calls to access other users' data
- โ Test horizontal privilege escalation: access another user's resources with your session
- โ Test vertical privilege escalation: access admin endpoints with a regular user session
- โ Check for missing function-level access control on API endpoints
- โ Test direct object references in file downloads, exports, and reports
Phase 4: Configuration & Headers
Security Headers (OWASP A05)
- โ
Content-Security-Policyโ present and restrictive (nounsafe-inline, nounsafe-eval) - โ
X-Frame-OptionsโDENYorSAMEORIGIN(prevents clickjacking) - โ
X-Content-Type-Options: nosniffโ prevents MIME type sniffing - โ
Strict-Transport-Securityโ present withmax-ageโฅ 31536000 - โ
Referrer-Policyโstrict-origin-when-cross-originor stricter - โ
Permissions-Policyโ restricts browser features (camera, microphone, geolocation)
CORS Configuration
- โ Check
Access-Control-Allow-Originโ should not be*with credentials - โ Test origin reflection: does the server reflect any origin back in the CORS header?
- โ Check
Access-Control-Allow-Credentials: truewith permissive origins
Information Disclosure
- โ Check for verbose error messages (stack traces, database errors, file paths)
- โ Check
Serverheader for version disclosure - โ Check for exposed
.env,.git,web.config,phpinfo.php - โ Check for debug mode indicators (
DEBUG=True, development error pages)
Phase 5: Cryptography & TLS
TLS Configuration (OWASP A02)
- โ TLS version: 1.2 minimum, 1.3 preferred. Flag TLS 1.0/1.1.
- โ Cipher suites: no RC4, DES, 3DES, export-grade ciphers
- โ Certificate: valid, not expired, correct hostname, not self-signed
- โ HSTS: present with adequate
max-age - โ Certificate transparency: check CT logs for unexpected certificates
For a deep dive, see How to Audit TLS Configuration.
Phase 6: Components & Supply Chain
Vulnerable Components (OWASP A06)
- โ Identify all client-side libraries (jQuery, React, Angular, Bootstrap) and their versions
- โ Cross-reference against known CVEs (Snyk, NVD, GitHub Advisory Database)
- โ Check for outdated server-side frameworks (visible in headers, error pages, or fingerprinting)
Supply Chain (OWASP A08)
- โ Check Subresource Integrity (SRI): all CDN-loaded
<script>and<link>tags should haveintegrityattributes - โ Verify CDN sources are legitimate (no typosquatting domains)
- โ Check for inline scripts that could be replaced by CSP-compliant external files
Phase 7: API-Specific Testing
If the application exposes APIs (REST, GraphQL, gRPC), add these checks:
- โ Test rate limiting on authentication endpoints
- โ Test for mass assignment (send extra fields in POST/PUT requests)
- โ Test GraphQL introspection (should be disabled in production)
- โ Test for excessive data exposure (API returns more fields than the UI displays)
- โ Check API versioning โ are old, deprecated endpoints still accessible?
- โ Test pagination for data leakage (can you enumerate all records?)
Tool Recommendations
| Phase | Free/Open Source | Commercial |
|---|---|---|
| Recon | OWASP ZAP, ffuf, Nuclei, Amass | Burp Suite Pro, SecurityClaw |
| Injection | sqlmap, ZAP Active Scan, Nuclei | Burp Suite Pro, SecurityClaw |
| Auth/Access | ZAP Forced Browse, jwt_tool | Burp Suite Pro (Autorize extension) |
| Headers/Config | SecurityHeaders.com, Nuclei | SecurityClaw |
| TLS | testssl.sh, sslyze, Qualys SSL Labs | SecurityClaw (tls-crypto-auditor) |
| Components | Retire.js, npm audit, Trivy | Snyk, SecurityClaw (tech-stack-cve-scanner) |
For detailed tool comparisons, see ZAP vs Burp Suite and Nuclei vs Traditional Scanners. For CI/CD integration, see Automating ZAP in GitHub Actions.
The Checklist (Copy-Paste Ready)
Here's the condensed version you can paste into your testing notes:
## Web App Security Test Checklist
### Recon
- [ ] Tech stack identified (server, framework, language, WAF)
- [ ] Endpoints discovered (spider, API docs, JS analysis, directory brute-force)
### Injection (A03)
- [ ] SQLi tested (error-based, boolean-based, time-based)
- [ ] XSS tested (reflected, stored, DOM-based)
- [ ] SSRF tested (metadata endpoints, localhost, file://)
- [ ] Command injection tested (where applicable)
### Auth & Access (A01, A07)
- [ ] Username enumeration checked
- [ ] Account lockout tested
- [ ] Session management reviewed (cookie flags, fixation, JWT)
- [ ] IDOR tested on all resource endpoints
- [ ] Privilege escalation tested (horizontal + vertical)
### Config & Headers (A05)
- [ ] Security headers checked (CSP, X-Frame-Options, HSTS, etc.)
- [ ] CORS configuration tested
- [ ] Information disclosure checked (errors, headers, exposed files)
### Crypto & TLS (A02)
- [ ] TLS version and cipher suites checked
- [ ] Certificate validity confirmed
- [ ] HSTS present
### Components & Supply Chain (A06, A08)
- [ ] Client-side libraries version-checked against CVEs
- [ ] SRI present on CDN-loaded resources
- [ ] Server-side components fingerprinted
### API-Specific
- [ ] Rate limiting tested
- [ ] Mass assignment tested
- [ ] GraphQL introspection checked
- [ ] Excessive data exposure checked
Bottom Line
A security test is only as good as its coverage. This checklist won't catch everything โ business logic flaws, race conditions, and complex authorization bugs require manual analysis and domain knowledge. But it will catch the vulnerabilities that scanners and structured testing are designed to find.
Start with recon. Test injection on every input. Check the configuration. Verify the crypto. Scan the components. That covers 80% of what goes wrong in web applications.
For automated coverage of most of these checks, see our SecurityClaw OWASP Top 10 coverage analysis.