import os, sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) from starlette.middleware.base import BaseHTTPMiddleware from starlette.requests import Request CSP = ( "default-src 'self'; " "script-src 'self' https://cdnjs.cloudflare.com https://fonts.googleapis.com 'unsafe-inline'; " "style-src 'self' https://fonts.googleapis.com 'unsafe-inline'; " "font-src 'self' https://fonts.gstatic.com; " "img-src 'self' data: https:; " "connect-src 'self' https://*.hf.space wss://*.hf.space https://fonts.googleapis.com; " "frame-ancestors 'none'; " "base-uri 'self';" ) HEADERS = { "Content-Security-Policy": CSP, "Strict-Transport-Security": "max-age=31536000; includeSubDomains", "X-Frame-Options": "DENY", "X-Content-Type-Options": "nosniff", "Referrer-Policy": "strict-origin-when-cross-origin", "Permissions-Policy": "geolocation=(), microphone=(), camera=()", "X-XSS-Protection": "1; mode=block", } class SecurityHeadersMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next): response = await call_next(request) for header, value in HEADERS.items(): response.headers[header] = value return response