QA checklist
1. Input Validation (Basic XSS/SQL Injection)
In any input field (e.g., form, search), enter:
"><script>alert(1)</script>
β Should not execute any script.' OR 1=1--
β Should not affect login or queries.
Observe page behavior and console for script execution or server errors.
2. Session Management
Login β Close tab β Reopen and access the app β Should still be logged in if session valid.
Login β Wait 30+ minutes idle β Try again β App should timeout session.
After logout, try using browser back β Should not allow access to pages.
3. Access Control / IDOR (Insecure Direct Object Reference)
Login as User A β Copy a URL containing an object ID (
/flow/123
)Login as User B β Try accessing that same URL β Should receive Access Denied or 404
4. Error Handling / Information Leakage
Force an error (e.g., disconnect network or corrupt URL) β App should show a friendly error page, not a stack trace, database name, or internal path.
Look at responses in dev tools β Ensure no sensitive info (tokens, env values, etc.) is leaked.
5. Role-based Access Control (RBAC)
Log in with different roles (Admin/User/Viewer, etc.)
Try accessing features or APIs not allowed for that role via direct link β App should block or hide.
6. File Upload Validation (if applicable)
Try uploading:
.exe
or.php
files β Should be blockedLarge files (e.g., >20MB) β Should show limit exceeded
Rename a
.js
file to.jpg
β Should still be blocked
Ensure uploaded files canβt be directly accessed unless needed
7. Security Headers (Non-CF Controlled)
Use browser dev tools β Network β Any request β Response headers
Check for:
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer
orstrict-origin-when-cross-origin
(CF may not always cover these fully; backend should ensure)
8. Token & API Security
Open browser dev tools β Look for JWT or auth tokens β Ensure they are:
Stored in secure, HTTP-only cookies (preferred)
Not exposed in localStorage/sessionStorage (avoid this if possible)
Try calling a few API endpoints manually with an expired/invalid token β Should return 401/403, not data.