fix: stricter headers for non-iframe usage
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user