source: Klonkt/src/views/partials/page-data.ejs@ 54ee51c

main
Last change on this file since 54ee51c was 54ee51c, checked in by roboburr <roboburr@…>, 5 weeks ago

De profielkop, de track-editor en het data-kanaal (shaer-bqr, stap 3c)

PROFIELKOP naar mod/chrome.js: chrome.ejs neemt die partial op, dus hij zit in
de OOB-swap en kwam bij elke navigatie opnieuw binnen. Hoort bij de chrome, niet
bij een pagina.

TRACK-EDITOR (475 regels, geen interpolatie) naar een eigen module. admin-audio
neemt hem op, dus die route vraagt om 'admin-audio track-editor' -- een pagina
mag meer dan een module willen.

HET DATA-KANAAL, want de rest heeft het nodig. Een module is een statisch
bestand, dus er kan geen EJS in; alles wat een script van de server nodig heeft
gaat via partials/page-data.ejs en wordt gelezen met pageData() uit mod/lib.js.

Dat is een script-element en toch geen CSP-probleem: een script met een ander
type dan JavaScript wordt niet uitgevoerd en niet opgehaald, dus script-src heeft
er niets over te zeggen. Het werkt daarmee ook in inhoud die via htmx binnenkomt.

Twee dingen die daar misgaan als je ze niet doet, en allebei nagemeten:

De kleiner-dan wordt ontsnapt. Zonder dat sluit een sluitende script-tag IN de
gegevens het blok voortijdig af en staat de rest als HTML op de pagina.
Getoetst met precies zo'n waarde.

pageData() leest ELKE KEER opnieuw en onthoudt niets. Bij een htmx-navigatie
wisselt de inhoud terwijl de module blijft leven, dus een blok dat je bij het
laden vasthoudt is een pagina later verouderd.

Alle templates compileren.

  • Property mode set to 100644
File size: 949 bytes
Line 
1<%#
2 Servergegevens naar een module (shaer-bqr).
3
4 Een module is een statisch bestand, dus er kan geen EJS-tag in. Alles wat een
5 script van de server nodig heeft -- vertalingen, ids, instellingen -- komt
6 hierlangs, en de module leest het met pageData() uit mod/lib.js.
7
8 Waarom dit GEEN CSP-probleem is terwijl het een script-element is: een script
9 met een ander type dan JavaScript wordt niet uitgevoerd en niet opgehaald, dus
10 script-src heeft er niets over te zeggen. Het is een gegevensblok dat toevallig
11 in een script-tag staat, en het werkt daarmee ook in inhoud die via htmx
12 binnenkomt.
13
14 De kleiner-dan wordt ontsnapt: zonder dat sluit een sluitende script-tag IN de
15 gegevens dit blok voortijdig af, en dan staat de rest als HTML op de pagina.
16-%>
17<% if (typeof pageData !== 'undefined' && pageData) { %><script type="application/json" data-page-data><%- JSON.stringify(pageData).replace(/</g, '\\u003c') %></script><% } %>
Note: See TracBrowser for help on using the repository browser.