Skip to content

Security: space-bacon/my_rust_cms

Security

SECURITY.md

Security Implementation Guide

This document outlines the comprehensive security measures implemented in the Rust CMS to protect against common web application vulnerabilities.

Implemented Security Features βœ…

1. Enhanced Password Security

  • 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

2. Transport Security

  • 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

3. Rate Limiting & Brute Force Protection

  • 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

4. CORS Security

  • Environment-Aware: Development vs Production configurations
  • Strict Origin Control: Only allows specific domains in production
  • Credential Protection: Properly configured credential handling

5. File Upload Security

  • 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

6. Input Sanitization & XSS Protection

  • 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

7. Session & Authentication Security

  • 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

8. Error Handling Security

  • 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

Remaining Security Tasks πŸ”„

1. Dependency Vulnerabilities

  • 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

2. Secrets Management

  • Current: Default secrets in config.rs
  • Required: External environment variable configuration
  • Action: Rotate all default keys before production deployment

3. Backup Security

  • Required: Encrypt backup files
  • Required: Secure backup storage and access controls
  • Required: Backup integrity verification

Security Configuration

Environment Variables (Production)

# 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

Production Deployment Checklist

  • 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

Security Headers Applied

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=()

Testing Security

Manual Testing

  1. Authentication: Test rate limiting on login endpoint
  2. File Upload: Test upload of various file types and malicious files
  3. XSS: Test input fields with script injection attempts
  4. CORS: Verify cross-origin requests from unauthorized domains are blocked

Automated Testing

# Run security audit
cargo audit

# Test with security scanner
./scripts/security-scan.sh

# Load testing with rate limiting
./scripts/load-test-auth.sh

Security Incident Response

  1. Detection: Monitor logs for suspicious activity
  2. Isolation: Implement rate limiting and IP blocking
  3. Investigation: Review security logs and access patterns
  4. Recovery: Rotate compromised secrets if necessary
  5. Prevention: Update security measures based on findings

Regular Security Maintenance

  • 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

Contact

For security issues, please contact riverwalkit@proton.me

Do not report security vulnerabilities through public GitHub issues.

There aren't any published security advisories