""" Sicherheitskonfiguration für die MYP Platform """ # Sicherheits-Headers für HTTP-Responses SECURITY_HEADERS = { 'Content-Security-Policy': ( "default-src 'self'; " "script-src 'self' 'unsafe-eval' 'unsafe-inline'; " "script-src-elem 'self' 'unsafe-inline'; " "style-src 'self' 'unsafe-inline'; " "font-src 'self'; " "img-src 'self' data:; " "connect-src 'self'; " "worker-src 'self' blob:; " "frame-src 'none'; " "object-src 'none'; " "base-uri 'self'; " "form-action 'self'; " "frame-ancestors 'none';" ), 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'DENY', 'X-XSS-Protection': '1; mode=block', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'Permissions-Policy': 'geolocation=(), microphone=(), camera=()' } # Rate Limiting Konfiguration RATE_LIMITS = { 'default': "200 per day, 50 per hour", 'login': "5 per minute", 'api': "100 per hour", 'admin': "500 per hour" } # Session-Sicherheit SESSION_CONFIG = { 'SESSION_COOKIE_SECURE': False, # Für Offline-Betrieb auf False setzen 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SAMESITE': 'Lax', 'PERMANENT_SESSION_LIFETIME': 3600 # 1 Stunde } # CSRF-Schutz CSRF_CONFIG = { 'CSRF_ENABLED': True, 'CSRF_SESSION_KEY': 'csrf_token', 'CSRF_TIME_LIMIT': 3600 } class SecurityConfig: """Sicherheitskonfiguration für die Anwendung""" def __init__(self): self.headers = SECURITY_HEADERS self.rate_limits = RATE_LIMITS self.session_config = SESSION_CONFIG self.csrf_config = CSRF_CONFIG def get_headers(self): """Gibt die Sicherheits-Headers zurück""" return self.headers def get_rate_limits(self): """Gibt die Rate-Limiting-Konfiguration zurück""" return self.rate_limits def get_session_config(self): """Gibt die Session-Konfiguration zurück""" return self.session_config def get_csrf_config(self): """Gibt die CSRF-Konfiguration zurück""" return self.csrf_config def get_security_headers(): """Gibt die Sicherheits-Headers zurück""" return SECURITY_HEADERS