mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-23 01:11:09 -05:00
- Added migration to convert unique_together constraints to UniqueConstraint for RideModel. - Introduced RideFormMixin for handling entity suggestions in ride forms. - Created comprehensive code standards documentation outlining formatting, docstring requirements, complexity guidelines, and testing requirements. - Established error handling guidelines with a structured exception hierarchy and best practices for API and view error handling. - Documented view pattern guidelines, emphasizing the use of CBVs, FBVs, and ViewSets with examples. - Implemented a benchmarking script for query performance analysis and optimization. - Developed security documentation detailing measures, configurations, and a security checklist. - Compiled a database optimization guide covering indexing strategies, query optimization patterns, and computed fields.
3.7 KiB
3.7 KiB
ThrillWiki Security Checklist
Use this checklist for code reviews and pre-deployment verification.
Pre-Deployment Checklist
Django Settings
DEBUG = FalseSECRET_KEYis unique and strong (50+ characters)ALLOWED_HOSTSis configured (no wildcards)CSRF_TRUSTED_ORIGINSis configuredSECURE_SSL_REDIRECT = TrueSECURE_HSTS_SECONDS >= 31536000(1 year)SECURE_HSTS_INCLUDE_SUBDOMAINS = TrueSECURE_HSTS_PRELOAD = True
Cookie Security
SESSION_COOKIE_SECURE = TrueSESSION_COOKIE_HTTPONLY = TrueSESSION_COOKIE_SAMESITE = 'Strict'CSRF_COOKIE_SECURE = TrueCSRF_COOKIE_SAMESITE = 'Strict'
Database
- Database password is strong
- Database connection uses SSL
- Database user has minimal required permissions
- No raw SQL with user input
Environment
- Environment variables are used for secrets
- No secrets in version control
.envfile is in.gitignore- Production logs don't contain sensitive data
Code Review Checklist
Input Validation
- All user input is validated
- File uploads use
validate_image_upload() - User-generated HTML uses
|sanitizefilter - URLs are validated with
sanitize_url() - Form data uses Django forms/serializers
Output Encoding
- No
|safefilter on user-controlled content - JSON data uses
json_scripttag - JavaScript strings use
escapejsfilter - SVG icons use
|sanitize_svgfilter
Authentication
- Sensitive views require
@login_required - API views have appropriate
permission_classes - Password changes invalidate sessions
- Rate limiting on auth endpoints
Authorization
- Object-level permissions checked
- Users can only access their own data
- Admin actions require proper permissions
- No privilege escalation paths
Data Protection
- Sensitive data not logged
- PII masked in logs
- Error messages don't expose internals
- Secure deletion of sensitive data
CSRF
- All forms include
{% csrf_token %} - AJAX requests include CSRF header
- CSRF exemptions are documented and justified
SQL Injection
- No raw SQL with user input
- No
.extra()with user input - Parameterized queries for raw SQL
- Django ORM used for queries
Incident Response
If a Vulnerability is Found
- Document the vulnerability
- Assess impact and affected users
- Develop and test a fix
- Deploy fix to production
- Notify affected users if needed
- Post-mortem analysis
If a Breach is Suspected
- Isolate affected systems
- Preserve logs and evidence
- Notify relevant parties
- Investigate scope
- Remediate and restore
- Document lessons learned
Regular Security Tasks
Weekly
- Review error logs for anomalies
- Check rate limiting effectiveness
- Monitor failed login attempts
Monthly
- Run
python manage.py security_audit - Review and update dependencies
- Check for security advisories
Quarterly
- Full security review
- Penetration testing
- Update security documentation
- Review and rotate secrets
Security Tools
Recommended Tools
- OWASP ZAP: Web application scanner
- bandit: Python security linter
- safety: Python dependency checker
- pip-audit: Vulnerability scanner for Python packages
Running Security Scans
# Run Django security check
python manage.py check --tag=security
# Run security audit
python manage.py security_audit --verbose
# Check for vulnerable dependencies
pip-audit
# Run Python security linter
bandit -r backend/