Review & Quality
Estimated time: 25–40 min

Security Review Checklist

A practical, risk-based security review checklist for developers and code reviewers to systematically catch vulnerabilities during software development.

#Security#AppSec#Authentication#Authorization#OWASP#Input Validation#Secrets#Code Review
Target Component:
Phase Preset:
Progress:0%0 of 59 completed

1. Authentication & Session Security

Verify identity verification, session management, and token lifetime security.

0/5 checks
Authentication middleware enforced on all protected endpointsBlockingBackend Dev
Cryptographically strong session token & JWT signing algorithms usedBlockingBackend Dev
Session token expiration & rotation enforcedImportantBackend Dev
Auth tokens stored in HTTP-only, Secure, SameSite cookiesBlockingFrontend Dev
Login & password reset flows protected against brute-forceBlockingBackend Dev

2. Authorization & Tenant Boundaries (BOLA / IDOR)

Prevent unauthorized access across users, roles, and multi-tenant boundaries.

0/5 checks
Resource ownership explicitly verified server-side (No IDOR)BlockingBackend Dev
Vertical privilege escalation preventedBlockingBackend Dev
Horizontal privilege escalation preventedBlockingBackend Dev
RBAC permissions validated server-side, not just in UIBlockingBackend Dev
Object identifiers & UUIDs validated for tenant isolationImportantBackend Dev

3. Input Validation & Data Boundaries

Enforce strict schema validation and boundary limits on all incoming request data.

0/4 checks
Strict schema validation applied to all request inputsBlockingBackend Dev
String lengths, numeric ranges, and array sizes constrainedImportantBackend Dev
Unicode normalization & character encoding handledSuggestionBackend Dev
Unexpected & extra properties stripped during parsingBlockingBackend Dev

4. Injection Attack Prevention

Eliminate SQL, command, template, and query language injection vulnerabilities.

0/4 checks
Database queries use parameterized statements / ORM bindingsBlockingBackend Dev
System shell execution avoided or argument-isolatedBlockingBackend Dev
Template engines escape dynamic variables (No SSTI)BlockingBackend Dev
NoSQL & search query special characters sanitizedImportantBackend Dev

5. Output Escaping & Browser Security (XSS / CORS / CSP)

Protect client-side rendering against XSS, open redirects, and origin exploits.

0/5 checks
Dynamic HTML output context-escaped to prevent XSSBlockingFrontend Dev
Dangerous DOM sinks strictly auditedBlockingFrontend Dev
Content Security Policy (CSP) headers configuredImportantDevOps / Frontend
CORS headers restrict origins & credential accessBlockingBackend Dev
Open redirect vulnerabilities preventedImportantBackend Dev

6. Sensitive Data Handling & Leak Prevention

Protect passwords, PII, payment data, and sensitive client state from exposure.

0/4 checks
Passwords hashed with adaptive memory-hard algorithmsBlockingBackend Dev
Sensitive PII encrypted at rest in databaseBlockingBackend Dev
Client-side state & Redux/Zustand stores scrubbed of secretsImportantFrontend Dev
Analytics & APM tools scrubbed of sensitive headers & inputsImportantFrontend Dev

7. Secrets Management & Repository Hygiene

Prevent hardcoded API keys, tokens, and credentials from entering source code.

0/4 checks
Zero API keys, private keys, or credentials hardcoded in source codeBlockingCode Reviewer
Secrets loaded exclusively from environment variables or VaultBlockingBackend Dev
Frontend bundles verified to not expose server secretsBlockingFrontend Dev
CI/CD build logs & test outputs mask secret environment variablesImportantDevOps

8. API Security & Rate Limiting

Safeguard APIs against resource exhaustion, mass assignment, and data over-exposure.

0/4 checks
Rate limiting middleware applied to sensitive endpointsBlockingBackend Dev
Mass assignment / DTO binding preventedBlockingBackend Dev
Request body payload size capped (e.g. 1MB)ImportantBackend Dev
Resource enumeration prevented via non-sequential IDsImportantBackend Dev

9. File Uploads & Path Safety

Prevent malicious file execution, path traversal, and storage exhaustion.

0/4 checks
File extension & magic byte content type validatedBlockingBackend Dev
Uploaded files stored in non-executable isolated storageBlockingDevOps / Backend
Path Traversal vulnerabilities prevented (path.basename)BlockingBackend Dev
Maximum upload file size limits enforcedImportantBackend Dev

10. Dependency & Supply Chain Security

Audit third-party libraries for vulnerabilities, typosquatting, and supply chain risks.

0/4 checks
Newly introduced packages audited for reputation & maintenanceImportantCode Reviewer
Automated vulnerability scanner (npm audit / Snyk) run cleanBlockingDevOps / Dev
Package lockfiles committed to prevent lockfile driftImportantDevOps
Unnecessary & duplicate dependencies prunedNitBackend Dev

11. Cryptography & Key Management

Avoid custom cryptographic implementations and obsolete algorithms.

0/3 checks
Zero custom cryptographic algorithms implementedBlockingBackend Dev
Cryptographically secure random number generator (CSPRNG) usedBlockingBackend Dev
Deprecated algorithms (MD5, SHA1, DES) avoidedImportantBackend Dev

12. Error Handling & Information Disclosure

Prevent stack traces and internal debugging information from leaking to clients.

0/3 checks
Production error responses return generic messagesBlockingBackend Dev
Auth & password reset errors prevent user enumerationImportantBackend Dev
Debug flags & verbose logging disabled in productionBlockingDevOps

13. Security Telemetry & Event Logging

Ensure security events are logged for auditability without logging sensitive secrets.

0/3 checks
Critical security events logged for audit trailImportantBackend Dev
Structured logs include user ID, IP, timestamp & trace IDImportantBackend Dev
Logs automatically redact passwords, tokens, & PIIBlockingBackend Dev

14. Business Logic & Workflow Flaws

Guard against step bypassing, race conditions, and parameter manipulation in business workflows.

0/4 checks
Multi-step workflow state transitions enforced server-sideBlockingBackend Dev
Financial & inventory operations guard against race conditionsBlockingBackend Dev
Negative price, quantity, or discount manipulation preventedBlockingBackend Dev
Replay attacks prevented via nonces or idempotency keysImportantBackend Dev

15. Infrastructure & Configuration Hardening

Audit security headers, storage access policies, and environment configurations.

0/3 checks
HTTP security response headers configuredImportantDevOps
Default admin credentials & sample files removedBlockingDevOps
Cloud storage buckets configured with private accessBlockingDevOps

Developer Security Review Boundary Notice

This checklist is designed as a practical first-pass tool for software developers and code reviewers to catch common vulnerabilities during pull request reviews. Completing this checklist does not prove an application is 100% secure. It is not a replacement for formal threat modeling, automated SAST/DAST security scanning, or professional third-party penetration testing.

Reviewer Threat Mindset

6 Essential Questions Every Code Reviewer Must Ask

Before approving code changes, shift your perspective from "Does this code work for valid users?" to "How could a malicious user tamper with these requests?"

1What can the user control in this request?

Identify all user-controlled inputs: URL parameters, query strings, headers, cookies, file names, and JSON body fields. Never trust values without server-side validation.

2What happens if they swap resource identifiers?

If an endpoint takes an ID (e.g. /api/orders/9921), test if replacing it with another user's ID leaks or mutates data (IDOR / BOLA vulnerability).

3What if they call endpoints out of workflow order?

Can an attacker bypass Step 2 (payment verification or MFA challenge) and call Step 3 directly? Ensure backend controllers validate multi-step state machine transitions.

4What if they repeat the request in parallel?

Sending 10 concurrent requests to a single-use coupon or checkout endpoint can exploit race conditions to redeem rewards multiple times before DB locks update.

5What data should this user NOT be able to see?

Check if API responses return full database objects (including password hashes, internal flags, or PII) relying on the frontend to filter displayed fields.

6What is trusted only because the frontend enforces it?

Disabling a button or hiding a form in React does NOT stop cURL or Postman. All validation and authorization must be re-enforced on the backend server.

Common Vulnerabilities

Top 5 Security Vulnerability Patterns & Prevention

Focus your code review effort on these five high-frequency vulnerability classes:

1. Broken Object Level Authorization (IDOR)

Fetching resources by ID without checking if the ID belongs to the authenticated user or tenant.

// Bad: findOne({ id: req.params.id })
// Good: findOne({ id: req.params.id, tenantId: user.tenantId })
2. Hardcoded Secrets & Key Leaks

Accidentally committing API keys, private certificates, or DB credentials to source repositories or public frontend bundles.

// Bad: const KEY = "sk_live_99a..."
// Good: const KEY = process.env.STRIPE_SECRET_KEY
3. Cross-Site Scripting (XSS)

Injecting un-sanitized user strings into DOM sinks, executing arbitrary JavaScript in user browsers.

// Bad: dangerouslySetInnerHTML={{ __html: input }}
// Good: DOMPurify.sanitize(input)

When to Use This Checklist

  • Before approving pull requests that modify auth, permissions, data queries, or external APIs.
  • When adding new third-party npm/pip dependencies or updating crypto/token handling.
  • During feature design reviews to audit authorization checks, tenant boundaries, and rate limits.
  • When exposing new public endpoints, file upload handlers, or webhook callbacks.

Common Pitfalls to Avoid

  • Relying on frontend validation or UI hiding for authorization instead of enforcing permission checks in backend controllers.
  • Checking user roles (is_admin) but failing to verify resource tenant ownership (WHERE user_id = current_user.id), leading to IDOR bugs.
  • Committing API keys, DB credentials, or JWT signing secrets directly into git repositories or client-side bundles.
  • Using raw string concatenation for SQL queries or shell commands instead of parameterized APIs.
  • Assuming 100% checklist completion equals full application security — a checklist is a baseline audit tool, not a penetration test.