Creator Network Security Audit Checklist

cgen-0f3790d3aa61400b81653bd239caaba7
This commit is contained in:
Builder.io 2025-11-08 02:00:03 +00:00
parent 497f79e82f
commit f35e8d7ca6

275
tests/SECURITY_AUDIT.md Normal file
View file

@ -0,0 +1,275 @@
# Creator Network Security Audit Checklist
## Phase 3: Testing & Validation
### 🔐 Authentication & Authorization
- [ ] **JWT Validation**
- [ ] All protected endpoints require valid JWT token
- [ ] Expired tokens are rejected
- [ ] Invalid/malformed tokens return 401
- [ ] Token claims are validated before processing
- [ ] **User Context Extraction**
- [ ] user_id is extracted from Supabase auth context (not request body)
- [ ] User cannot access/modify other users' data
- [ ] Session invalidation works properly on logout
- [ ] **Authorization Checks**
- [ ] Creator can only update their own profile
- [ ] Opportunity creator can only update their own opportunities
- [ ] Applicant can only withdraw their own applications
- [ ] Only opportunity creator can review applications
- [ ] DevConnect links are user-specific
### 🛡️ Row Level Security (RLS) Policies
- [ ] **aethex_creators table**
- [ ] Users can read own profile
- [ ] Users can update own profile
- [ ] Public profiles are discoverable (is_discoverable=true)
- [ ] Private profiles (is_discoverable=false) are hidden from directory
- [ ] **aethex_opportunities table**
- [ ] Anyone can read open opportunities
- [ ] Only creator can update/delete own opportunities
- [ ] Closed opportunities not visible to applicants
- [ ] **aethex_applications table**
- [ ] Users can read their own applications
- [ ] Applicant can only see their own applications
- [ ] Opportunity creator can see applications for their opportunities
- [ ] Users cannot access others' applications
- [ ] **aethex_devconnect_links table**
- [ ] Users can only access their own DevConnect links
- [ ] Links cannot be modified by non-owners
- [ ] **aethex_projects table**
- [ ] Users can read public projects
- [ ] Users can only modify their own projects
### 🔒 Data Protection
- [ ] **Sensitive Data**
- [ ] Passwords are never returned in API responses
- [ ] Email addresses are not exposed in public profiles
- [ ] Private notes/applications are not leaked
- [ ] **Cover Letters**
- [ ] Only applicant and opportunity creator can see cover letters
- [ ] Cover letters are not visible in search results
- [ ] **Rate Limiting**
- [ ] Rate limiting is implemented on POST endpoints
- [ ] Prevents spam applications/profiles
- [ ] Prevents brute force attacks on search
### 🚫 Input Validation & Sanitization
- [ ] **Text Fields**
- [ ] Bio/description max length enforced (e.g., 500 chars)
- [ ] Username format validated (alphanumeric, dashes, underscores)
- [ ] HTML/script tags are escaped in output
- [ ] **File Uploads**
- [ ] Avatar URLs are validated/whitelisted
- [ ] No malicious file types accepted
- [ ] File size limits enforced
- [ ] **Array Fields**
- [ ] Skills array has max length
- [ ] Arm affiliations are from valid set
- [ ] Invalid values are rejected
- [ ] **Numeric Fields**
- [ ] Salary values are reasonable ranges
- [ ] Page/limit parameters are validated
- [ ] Negative values rejected where inappropriate
### 🔗 API Endpoint Security
**Creators Endpoints:**
- [ ] GET /api/creators
- [ ] Pagination parameters validated
- [ ] Search doesn't expose private fields
- [ ] Arm filter works correctly
- [ ] GET /api/creators/:username
- [ ] Returns 404 if profile is not discoverable
- [ ] No sensitive data leaked
- [ ] POST /api/creators
- [ ] Requires auth
- [ ] user_id extracted from auth context
- [ ] Duplicate username prevention works
- [ ] PUT /api/creators/:id
- [ ] Requires auth
- [ ] User can only update own profile
- [ ] No privilege escalation possible
**Opportunities Endpoints:**
- [ ] GET /api/opportunities
- [ ] Only open opportunities shown
- [ ] Closed/draft opportunities hidden
- [ ] Pagination and filters work
- [ ] GET /api/opportunities/:id
- [ ] Only returns open opportunities
- [ ] Creator info is sanitized
- [ ] POST /api/opportunities
- [ ] Requires auth + creator profile
- [ ] user_id extracted from auth
- [ ] Only opportunity creator can post
- [ ] PUT /api/opportunities/:id
- [ ] Requires auth
- [ ] Only creator can update own opportunity
- [ ] Can't change posted_by_id
**Applications Endpoints:**
- [ ] GET /api/applications
- [ ] Requires user_id + auth
- [ ] Users only see their own applications
- [ ] Opportunity creators can view applications
- [ ] POST /api/applications
- [ ] Requires auth + creator profile
- [ ] Validates opportunity exists
- [ ] Prevents duplicate applications
- [ ] Validates cover letter length
- [ ] PUT /api/applications/:id
- [ ] Requires auth
- [ ] Only opportunity creator can update
- [ ] Can only change status/response_message
- [ ] Can't change creator/opportunity
- [ ] DELETE /api/applications/:id
- [ ] Requires auth
- [ ] Only applicant can withdraw
- [ ] Application is properly deleted
**DevConnect Endpoints:**
- [ ] POST /api/devconnect/link
- [ ] Requires auth + creator profile
- [ ] user_id from auth context
- [ ] Validates DevConnect username format
- [ ] GET /api/devconnect/link
- [ ] Requires user_id + auth
- [ ] Users only see their own link
- [ ] Returns null if not linked
- [ ] DELETE /api/devconnect/link
- [ ] Requires auth
- [ ] Only user can unlink their account
- [ ] Updates devconnect_linked flag
### 🔍 SQL Injection Prevention
- [ ] **Parameterized Queries**
- [ ] All Supabase queries use parameterized queries (not string concatenation)
- [ ] User input never directly in SQL strings
- [ ] Search queries are sanitized
- [ ] **Search/Filter Safety**
- [ ] LIKE queries use proper escaping
- [ ] OR conditions properly scoped
- [ ] No SQL concatenation
### 🌐 CORS & External Access
- [ ] **CORS Headers**
- [ ] Only allowed origins can call API
- [ ] Credentials are properly scoped
- [ ] Preflight requests handled correctly
- [ ] **External Links**
- [ ] DevConnect URLs validated
- [ ] Avatar URLs validated
- [ ] No javascript: or data: URLs allowed
### 📋 Audit Logging
- [ ] **Critical Actions Logged**
- [ ] User account creation
- [ ] Opportunity creation/deletion
- [ ] Application status changes
- [ ] DevConnect linking/unlinking
- [ ] Profile modifications
- [ ] **Log Retention**
- [ ] Logs stored securely
- [ ] Logs retained for compliance period
- [ ] Sensitive data not logged
### 🔄 API Response Security
- [ ] **Error Messages**
- [ ] Don't leak system details
- [ ] Don't expose database structure
- [ ] Generic error messages for auth failures
- [ ] No stack traces in production
- [ ] **Response Headers**
- [ ] X-Content-Type-Options: nosniff
- [ ] X-Frame-Options: DENY
- [ ] Content-Security-Policy set
- [ ] X-XSS-Protection enabled
### 📱 Frontend Security
- [ ] **Token Management**
- [ ] Tokens stored securely (not localStorage if possible)
- [ ] Tokens cleared on logout
- [ ] Token refresh handled properly
- [ ] **XSS Prevention**
- [ ] User input escaped in templates
- [ ] No dangerouslySetInnerHTML without sanitization
- [ ] No eval() or similar dangerous functions
- [ ] **CSRF Protection**
- [ ] State-changing requests use POST/PUT/DELETE
- [ ] CSRF tokens included where applicable
### ✅ Testing Recommendations
1. **Penetration Testing**
- Test SQL injection attempts
- Test XSS payloads in input fields
- Test CSRF attacks
- Test broken access control
2. **Authorization Testing**
- Try accessing other users' resources
- Test privilege escalation attempts
- Verify RLS policies are enforced
3. **Data Validation Testing**
- Send oversized inputs
- Send malformed data
- Test boundary values
- Send special characters
4. **Rate Limit Testing**
- Rapid-fire requests
- Concurrent requests
- Verify limits are enforced
### 📝 Sign-Off
- [ ] All critical findings resolved
- [ ] All high-priority findings mitigated
- [ ] Security baseline established
- [ ] Monitoring and logging active
- [ ] Team trained on security practices
---
**Audit Date:** _________________
**Auditor:** _________________
**Status:** PENDING ⏳