This document outlines the comprehensive secu AD05 rity measures implemented in the Rust CMS to protect against common web application vulnerabilities.
- bcrypt Password Hashing: Industry-standard bcrypt with automatic salt generation (OWASP compliant)
- Automatic Salt Generation: Each password gets cryptographically secure random salt
- Cost Factor: Uses bcrypt DEFAULT_COST (12) for optimal security/performance balance
- Session-based Authentication: Secure database-backed sessions with HMAC-signed tokens
- HTTPS Enforcement: Security headers middleware enforces HTTPS in production
- HSTS Headers: HTTP Strict Transport Security with 1-year max-age and includeSubDomains
- Security Headers: Comprehensive set of security headers including:
- X-Content-Type-Options: nosniff
- X-Frame-Options: DENY
- X-XSS-Protection: 1; mode=block
- Referrer-Policy: strict-origin-when-cross-origin
- Content-Security-Policy: Strict CSP with WASM support
- Permissions-Policy: Restricts dangerous browser features
- Authentication Endpoints: 5 attempts per minute with burst of 10
- File Upload Endpoints: 10 uploads per minute with burst of 3
- IP-Based Limiting: Rate limits applied per IP address
- Future Enhancement: Ready for user-based rate limiting
- Environment-Aware: Development vs Production configurations
- Strict Origin Control: Only allows specific domains in production
- Credential Protection: Properly configured credential handling
- Magic Byte Validation: Verifies file content matches declared MIME type
- File Type Whitelist: Only allows safe file types (images, PDFs, text)
- Size Limits: Enforces maximum file size limits
- Filename Sanitization: Prevents directory traversal and malicious filenames
- Malicious Content Scanning: Detects embedded executables and scripts
- HTML Sanitization: Uses Ammonia library for safe HTML processing
- Text Escaping: HTML entity encoding for all user input
- Rich Content Support: Safe handling of rich text editor content
- URL Validation: Prevents javascript: and data: URI attacks
- SQL Injection Prevention: Basic protection against SQL injection patterns
- HMAC-Signed Tokens: Session tokens cryptographically signed with HMAC-SHA256
- Database-Backed Sessions: Server-side session storage with immediate revocation capability
- Role-Based Authentication: Strict admin role verification
- Session Expiration: Configurable session lifetimes with automatic cleanup
- Multi-Session Support: Controlled concurrent sessions per user
- Middleware Protection: All admin endpoints protected by authentication middleware
- Backward Compatibility: Supports both signed and unsigned tokens during transition
- Information Hiding: Generic error messages prevent information leakage
- Stack Trace Protection: No internal errors exposed to users
- Structured Logging: Secure logging without sensitive data exposure
- Issue: Diesel 1.4.8 has a binary protocol vulnerability (RUSTSEC-2024-0365)
- Status: Needs upgrade to Diesel >=2.2.3
- Impact: r2d2-diesel dependency chain needs updating
- Current: Default secrets in config.rs
- Required: External environment variable configuration
- Action: Rotate all default keys before production deployment
- Required: Encrypt backup files
- Required: Secure backup storage and access controls
- Required: Backup integrity verification
# Required: Change these defaults!
# Authentication uses secure session-based tokens (not JWTs)
SESSION_SECRET=your-super-secret-session-key-minimum-32-characters
# CORS Configuration
ALLOWED_ORIGINS=https://yourdomain.com,https://www.yourdomain.com
# Rate Limiting
AUTH_RATE_LIMIT_PER_MINUTE=5
GENERAL_RATE_LIMIT_PER_MINUTE=60
UPLOAD_RATE_LIMIT_PER_MINUTE=10
# File Upload Security
MAX_FILE_SIZE=10485760
UPLOAD_DIR=./uploads
# Database
DATABASE_URL=postgresql://user:password@localhost:5432/cms_db
- HTTPS: Deploy behind HTTPS-enabled reverse proxy (nginx, Cloudflare, etc.)
- Secrets: Rotate all default session secrets
- CORS: Update allowed origins to production domains only
- Database: Use production database with restricted access
- File Storage: Configure secure file storage with proper permissions
- Monitoring: Set up security event logging and monitoring
- Backups: Implement encrypted backup strategy
- Updates: Keep all dependencies updated regularly
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Referrer-Policy: strict-origin-when-cross-origin
Content-Security-Policy: default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; ...
Permissions-Policy: geolocation=(), microphone=(), camera=()
- Authentication: Test rate limiting on login endpoint
- File Upload: Test upload of various file types and malicious files
- XSS: Test input fields with script injection attempts
- CORS: Verify cross-origin requests from unauthorized domains are blocked
# Run security audit
cargo audit
# Test with security scanner
./scripts/security-scan.sh
# Load testing with rate limiting
./scripts/load-test-auth.sh
- Detection: Monitor logs for suspicious activity
- Isolation: Implement rate limiting and IP blocking
- Investigation: Review security logs and access patterns
- Recovery: Rotate compromised secrets if necessary
- Prevention: Update security measures based on findings
- Weekly: Run
cargo audit
to check for new vulnerabilities - Monthly: Review access logs for suspicious patterns
- Quarterly: Security audit and penetration testing
- Annually: Complete security review and policy updates
For security issues, please contact riverwalkit@proton.me
Do not report security vulnerabilities through public GitHub issues.