fix: stricter headers for non-iframe usage

This commit is contained in:
Vlad Stan
2026-07-08 11:54:57 +03:00
parent 73bc5ddc16
commit 516b01c6eb
+10 -14
View File
@@ -5,7 +5,6 @@ import re
from dataclasses import dataclass from dataclasses import dataclass
from pathlib import Path from pathlib import Path
from typing import Any from typing import Any
from urllib.parse import urlencode
from fastapi import Depends, FastAPI, HTTPException, Request from fastapi import Depends, FastAPI, HTTPException, Request
from fastapi.responses import FileResponse from fastapi.responses import FileResponse
@@ -325,10 +324,19 @@ def _add_wasm_extension_frame_route(
"sandbox allow-scripts allow-forms; " "sandbox allow-scripts allow-forms; "
"default-src 'self' data: blob:; " "default-src 'self' data: blob:; "
"connect-src 'none'; " "connect-src 'none'; "
"form-action 'none'; "
"object-src 'none'; " "object-src 'none'; "
"base-uri 'none'; " "base-uri 'none'; "
"frame-ancestors 'self'" "frame-ancestors 'self'"
) )
response.headers["Cache-Control"] = "no-store"
response.headers["Cross-Origin-Opener-Policy"] = "same-origin"
response.headers["Cross-Origin-Resource-Policy"] = "same-origin"
response.headers["Permissions-Policy"] = (
"camera=(), microphone=(), geolocation=(), payment=(), "
"clipboard-read=(), clipboard-write=(), usb=()"
)
response.headers["Referrer-Policy"] = "no-referrer"
response.headers["X-Content-Type-Options"] = "nosniff" response.headers["X-Content-Type-Options"] = "nosniff"
return response return response
@@ -350,14 +358,13 @@ def _wasm_extension_wrapper_response(
path_params: dict[str, str], path_params: dict[str, str],
user_json: str | None, user_json: str | None,
) -> Any: ) -> Any:
frame_url = _wasm_extension_frame_url(request, frame_path, path_params)
public = auth == "public" public = auth == "public"
return template_renderer().TemplateResponse( return template_renderer().TemplateResponse(
request, request,
"wasm_extension.html", "wasm_extension.html",
{ {
"extension": extension, "extension": extension,
"frame_url": frame_url, "frame_url": frame_path,
"bridge": { "bridge": {
"extensionId": extension.id, "extensionId": extension.id,
"public": public, "public": public,
@@ -371,17 +378,6 @@ def _wasm_extension_wrapper_response(
) )
def _wasm_extension_frame_url(
request: Request,
frame_path: str,
path_params: dict[str, str],
) -> str:
params = _read_api_path_params(request, path_params)
params.update(_read_api_query_params(request))
query = urlencode(params)
return f"{frame_path}?{query}" if query else frame_path
def _wasm_extension_bridge_api_routes( def _wasm_extension_bridge_api_routes(
extension: WasmExtension, extension: WasmExtension,
public: bool, public: bool,