Comprehensive security checklists for development, deployment, and operations of Fund-My-Cause.
Before merging any code, verify:
- All sensitive operations require proper authentication
- Role-based access control is enforced
- User input is validated before authorization checks
- No hardcoded credentials or API keys
- Secrets are stored in environment variables or GitHub Secrets
- All user inputs are validated for type and format
- Input length limits are enforced
- Special characters are properly escaped
- No SQL injection or command injection vulnerabilities
- File uploads are validated (type, size, content)
- Errors do not leak sensitive information
- Stack traces are not exposed to users
- Error messages are generic and helpful
- Logging includes sufficient context for debugging
- Sensitive data is not logged
- No custom cryptographic implementations
- Industry-standard libraries are used (e.g.,
libsodium,ring) - Secrets are never logged or exposed in error messages
- Secrets are rotated regularly
- Private keys are never stored in version control
- All dependencies are from trusted sources
- Dependency versions are pinned (not floating)
- No known vulnerabilities in dependencies
- License compliance is verified
- Transitive dependencies are reviewed
- Code follows project style guidelines
- No dead code or commented-out code
- Functions are well-documented
- Complex logic has explanatory comments
- No TODO or FIXME comments without issues
- Unit tests cover security-relevant code paths
- Edge cases are tested (zero, max, negative values)
- Error conditions are tested
- Integration tests verify end-to-end flows
- Security tests are included (e.g., unauthorized access)
- All state transitions are validated
- Invariants are maintained (e.g., total raised ≤ goal)
- No reentrancy vulnerabilities
- No integer overflow/underflow
- Access control is enforced for all sensitive functions
- Deadline logic is correct
- Refund calculations are accurate
- Unit tests for all contract functions
- Integration tests for multi-step flows
- Edge case tests (zero amounts, max values, deadline edge cases)
- Negative tests (unauthorized access, invalid inputs)
- Gas usage is within limits
- Contract functions are documented
- State variables are documented
- Invariants are documented
- Error conditions are documented
- Security assumptions are documented
- All user inputs are validated
- Input length limits are enforced
- Special characters are properly escaped
- No XSS vulnerabilities
- No CSRF vulnerabilities
- All API calls use HTTPS
- API responses are validated
- Error responses do not leak sensitive information
- Rate limiting is implemented
- Request timeouts are set
- Wallet connection is explicit and user-approved
- Transaction details are displayed before signing
- Contract addresses are verified
- No automatic transaction signing
- Wallet errors are handled gracefully
- Sensitive data is not stored in localStorage
- Session data is cleared on logout
- No sensitive data in URLs or query parameters
- No sensitive data in error messages
- No sensitive data in console logs
- Content-Security-Policy is set
- X-Frame-Options is set
- X-Content-Type-Options is set
- Strict-Transport-Security is set
- Referrer-Policy is set
- All tests pass:
cargo test --workspace - All tests pass:
npm run test(frontend) - No security warnings from
cargo audit - No security warnings from
npm audit - Build is reproducible
- WASM hash is verified
- Code review completed by at least 2 team members
- Security review completed
- Architecture review completed (if applicable)
- Deployment plan is reviewed
- Rollback plan is documented
- Environment variables are correctly set
- Secrets are stored in GitHub Secrets
- No secrets in code or configuration files
- Configuration is validated
- Feature flags are set correctly
- Deployment steps are documented
- Rollback steps are documented
- Known issues are documented
- Breaking changes are documented
- Migration steps are documented (if applicable)
- Contract is deployed to the correct network
- Contract ID is verified
- Contract is initialized with correct parameters
- Registry is updated with new contract ID
- Contract is tested on testnet first
- Deployment is announced in release notes
- Frontend is built with production configuration
- Environment variables are set correctly
- Contract IDs are verified
- RPC endpoints are verified
- HTTPS is enforced
- Security headers are set
- Deployment is announced in release notes
- Monitoring and alerting are active
- Logs are being collected
- Backups are in place
- Disaster recovery plan is ready
- Incident response team is on standby
- Contract is deployed to the correct network
- Contract ID is verified on Stellar Expert
- WASM hash matches the published hash
- Campaign initialization parameters are correct
- Registry contract is updated
- Frontend is accessible and functional
- Wallet integration is working
- Transactions are being processed correctly
- Monitoring dashboards are active
- Alerting is configured
- Logs are being collected
- Performance metrics are being tracked
- Error rates are within acceptable limits
- Deployment is announced to users
- Release notes are published
- Known issues are communicated
- Support team is notified
- Stakeholders are informed
- Monitor error logs for anomalies
- Check system performance metrics
- Verify backups are completed
- Review security alerts
- Check for failed transactions
- Review access logs
- Check for security updates
- Verify monitoring and alerting
- Review incident reports
- Update security documentation
- Conduct security audit
- Review and update security policies
- Verify disaster recovery procedures
- Conduct penetration testing (if applicable)
- Review and update incident response procedures
- Conduct comprehensive security review
- Update threat model
- Review and update security checklist
- Conduct security training
- Plan security improvements
- Conduct formal security audit
- Penetration testing
- Security training for all team members
- Update security policies and procedures
- Review and update incident response procedures
- Anomaly detected in logs or metrics
- Security alert triggered
- User reports security issue
- Vulnerability discovered in dependency
- Suspicious activity detected
- Incident is reported via GitHub Security Advisories
- Reporter provides description and reproduction steps
- Impact assessment is provided
- Incident response team is notified
- Incident is logged in incident tracking system
- Verify the vulnerability
- Assess the scope and impact
- Determine if funds are at risk
- Classify the severity
- Notify stakeholders
- Activate incident response team
- Isolate affected systems (if necessary)
- Pause operations (if necessary)
- Revoke compromised credentials
- Block malicious traffic
- Preserve evidence for investigation
- Root cause analysis
- Determine affected components
- Identify all instances of the vulnerability
- Review logs and audit trails
- Document findings
- Develop fix or mitigation
- Test fix on testnet
- Conduct security review of fix
- Deploy fix to production
- Verify fix is effective
- Monitor for recurrence
- Notify affected users
- Publish security advisory
- Credit security researcher (if applicable)
- Update documentation
- Post-mortem analysis
- Document lessons learned
- Update security procedures
- Implement preventive measures
- Schedule follow-up security audit
- Close incident ticket
- Only authorized team members have repository access
- Branch protection rules are enforced
- Code review is required for all PRs
- Secrets are stored in GitHub Secrets
- Deploy keys are rotated regularly
- Access logs are reviewed regularly
- Only authorized team members can deploy
- Deployment requires approval
- Deployment is logged and audited
- Deployment credentials are rotated regularly
- Deployment access is revoked when team members leave
- Secrets are stored in GitHub Secrets
- Secrets are never logged or exposed
- Secrets are rotated regularly
- Secret access is logged
- Secrets are revoked when team members leave
- Only authorized team members have infrastructure access
- Access is logged and audited
- Multi-factor authentication is required
- Access is revoked when team members leave
- Access is reviewed regularly
- Dependency is from a trusted source
- Dependency has active maintenance
- Dependency has no known vulnerabilities
- Dependency license is compatible
- Dependency is necessary (no bloat)
- Security updates are applied within 7 days
- Minor updates are applied within 30 days
- Major updates are tested thoroughly
- Changelog is reviewed for breaking changes
- Tests are run after updates
-
npm auditis run regularly -
cargo auditis run regularly - Vulnerabilities are tracked and remediated
- Audit results are reviewed
- Audit results are documented
- Code follows project style guidelines
- Code is formatted correctly
- Linting passes without warnings
- Type checking passes (TypeScript, Rust)
- Tests pass with good coverage
- Code is documented
- Functions have docstrings
- Complex logic has explanatory comments
- Security assumptions are documented
- Known limitations are documented
- Unit tests cover all functions
- Integration tests cover all flows
- Edge cases are tested
- Error conditions are tested
- Security tests are included
- No hardcoded secrets
- No dangerous functions
- No unsafe code (without justification)
- Input validation is present
- Error handling is appropriate
- Before code review: Developer completes development checklist
- Before deployment: DevOps completes deployment checklist
- During incident: Incident response team uses incident response checklist
- During operations: Operations team uses operational checklist
- Quarterly: Security team reviews all checklists
- Print or copy the relevant checklist
- Go through each item systematically
- Mark items as complete
- Document any issues or deviations
- Escalate any unchecked items
- Archive completed checklists for audit trail
- Checklists are reviewed quarterly
- Checklists are updated based on lessons learned
- Checklists are updated when procedures change
- Checklists are updated when new threats are identified
- Checklists are version-controlled in this repository
Last Updated: 2026-06-01
Next Review: 2026-09-01
Maintained By: Security Team