Changeset 07de464 in Klonkt for src/server.js


Ignore:
Timestamp:
06/27/2026 09:37:05 AM (2 months ago)
Author:
Robin Genis <roboburr@…>
Branches:
main
Children:
f3551ec
Parents:
5421ce1
Message:

fix(csp): global frame-src (https:) for embeds, locked to 'self' on authorize_interaction

  • server.js — Helmet frameSrc → 'self' https: so embeds work in every context (feed, htmx/PWA, public pages); Robin chose global over per-domain.
  • middleware/render.js — renderPage now LOCKS frame-src down to 'self' on pages/authorize-interaction (untrusted remote content next to the interact buttons → no embeds/clickjacking); removed the now-unused per-domain embedOriginsFor helper.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/server.js

    r5421ce1 r07de464  
    125125      mediaSrc: ["'self'", "https:", "blob:"],
    126126      fontSrc: ["'self'"],
    127       frameSrc: [
    128         "'self'",
    129         "https://open.spotify.com",
    130         "https://w.soundcloud.com",
    131         "https://bandcamp.com",
    132         "https://embed.music.apple.com",
    133         "https://www.youtube-nocookie.com",
    134         "https://www.youtube.com",   // YouTube IFrame API sometimes creates a www.youtube.com iframe
    135         "https://player.vimeo.com",
    136       ],
     127      // Embeds (platform players + cross-site Klonkt audio players) are framed broadly:
     128      // ANY https origin, so embeds work in any context (feed, htmx/PWA nav, public pages).
     129      // The sensitive /authorize_interaction page tightens frame-src back to 'self' in
     130      // renderPage — it shows untrusted remote content next to the interact buttons.
     131      frameSrc: ["'self'", "https:"],
    137132    },
    138133  },
Note: See TracChangeset for help on using the changeset viewer.