File size: 1,123 Bytes
c794b6b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | """Production security response headers."""
from __future__ import annotations
import os
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.requests import Request
from starlette.responses import Response
class SecurityHeadersMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next) -> Response:
response = await call_next(request)
response.headers.setdefault("X-Content-Type-Options", "nosniff")
response.headers.setdefault("X-Frame-Options", "DENY")
response.headers.setdefault("Referrer-Policy", "strict-origin-when-cross-origin")
response.headers.setdefault("Permissions-Policy", "geolocation=(), microphone=(), camera=()")
if request.url.scheme == "https":
response.headers.setdefault("Strict-Transport-Security", "max-age=31536000; includeSubDomains")
if os.getenv("CEPHEUS_PRODUCTION", "").strip() == "1":
response.headers.setdefault(
"Content-Security-Policy",
"default-src 'none'; frame-ancestors 'none'",
)
return response
|