Harden UI security and add deployment templates
This commit is contained in:
31
main.py
31
main.py
@@ -18,6 +18,19 @@ LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO").upper()
|
||||
logging.basicConfig(level=LOG_LEVEL, format="%(asctime)s | %(levelname)s | %(message)s")
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
UI_CONTENT_SECURITY_POLICY = (
|
||||
"default-src 'self'; "
|
||||
"script-src 'self' 'unsafe-eval'; "
|
||||
"style-src 'self' 'unsafe-inline'; "
|
||||
"img-src 'self' data:; "
|
||||
"font-src 'self' data:; "
|
||||
"connect-src 'self'; "
|
||||
"object-src 'none'; "
|
||||
"base-uri 'self'; "
|
||||
"frame-ancestors 'none'; "
|
||||
"form-action 'self'"
|
||||
)
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
@@ -50,6 +63,24 @@ async def lifespan(app: FastAPI):
|
||||
|
||||
app = FastAPI(title="Ignis Core API", lifespan=lifespan)
|
||||
|
||||
|
||||
@app.middleware("http")
|
||||
async def add_security_headers(request, call_next):
|
||||
response = await call_next(request)
|
||||
response.headers.setdefault("Cache-Control", "no-store")
|
||||
response.headers.setdefault("Pragma", "no-cache")
|
||||
response.headers.setdefault("Referrer-Policy", "no-referrer")
|
||||
response.headers.setdefault("X-Content-Type-Options", "nosniff")
|
||||
response.headers.setdefault("X-Frame-Options", "DENY")
|
||||
response.headers.setdefault("Cross-Origin-Opener-Policy", "same-origin")
|
||||
response.headers.setdefault("Cross-Origin-Resource-Policy", "same-origin")
|
||||
response.headers.setdefault(
|
||||
"Permissions-Policy",
|
||||
"camera=(), geolocation=(), microphone=()",
|
||||
)
|
||||
response.headers.setdefault("Content-Security-Policy", UI_CONTENT_SECURITY_POLICY)
|
||||
return response
|
||||
|
||||
# Регистрация роутеров
|
||||
app.include_router(devices.router, prefix="/devices", tags=["Devices & Groups"])
|
||||
app.include_router(control.router, prefix="/control", tags=["Control"])
|
||||
|
||||
Reference in New Issue
Block a user