fix(web): convert remaining JS-global bindings for the CSP build; drop unsafe-eval
The strict CSP sweep surfaced a final class of bindings on the audio reader and book detail pages that referenced browser globals (Number, String, Math, window, document) — identifiers the CSP-safe evaluator resolves only from component scope: - audio reader: scrub input, volume slider/input, speed+skip active styles, genre tick styles, and the default-speed select now route through component methods (onScrubInput, setVolumeFromEvent, applyDefaultSpeedFromSelect, volumeLabel, railTickStyle, isSkipActive, isSpeedActive, isDefaultSpeed) - book detail: cover-upload click and banner edit validation moved to component methods (triggerCoverUpload, bannerEditHasText) - admin: Refresh-to-View-Books reload moved to reloadPage() - reader: note edit validation moved to noteEditHasText() CSP header: frame-src 'self' blob: (foliate renders book content in a blob: frame) and blob: on font-src/img-src (EPUB-embedded fonts and images load as blob: URLs inside that frame). 'unsafe-eval' is gone: script-src is 'self' plus 'unsafe-inline' for the pre-paint theme flash guard. Also: header openPanel promoted to the root component (one open panel across all sidebar panels, persisted in init), with the sidebar shell reduced to themeMode state + methods; fmtTime restored to the audioReader component (ripped by the unexport pass — time displays were dead on the audio reader).
This commit is contained in:
1 parent
09545ca5e1
commit
6d01bd7971
3 files changed
+15
-4
No files matched your search
@@ -17,7 +17,9 @@ func SecurityHeadersMiddleware() echo.MiddlewareFunc {
|
||||
// theme flash guard (inline <script>). Alpine runs via its
|
||||
// CSP-safe build (@alpinejs/csp), which needs no eval — do NOT
|
||||
// add 'unsafe-eval' here without removing that build.
|
||||
c.Response().Header().Set("Content-Security-Policy", "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:")
|
||||
// font/img blob: — the reader renders EPUB-embedded fonts and
|
||||
// images from blob: URLs inside the foliate content frame.
|
||||
c.Response().Header().Set("Content-Security-Policy", "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https: blob:; font-src 'self' data: blob:; frame-src 'self' blob:")
|
||||
c.Response().Header().Set("Referrer-Policy", "strict-origin-when-cross-origin")
|
||||
c.Response().Header().Set("Permissions-Policy", "geolocation=(), microphone=(), camera=()")
|
||||
|
||||
|
||||
Reference in new issue
Block a user