Auf der Apache-Seite kann ich mithilfe von mod_cspnonce korrekt eine Nonce generieren:
Code: Select all
LoadModule headers_module modules/mod_headers.so
LoadModule cspnonce_module modules/mod_cspnonce.so
Header always set X-Debug-Nonce "%{CSP_NONCE}e"
Problem
Auf der Angular SSR-Seite (Node/Express) kann ich diese Nonce nicht abrufen und in den Renderkontext von Angular einfügen.
Es passiert nichts: Angular rendert keine Nonce-Attribute für - oder -Tags.
SSR-Middleware-Code
Code: Select all
app.use((req, res, next) => {
const nonceHeader = req.headers['X-Debug-Nonce'];
const nonce =
typeof nonceHeader === 'string' ? nonceHeader : 'aezeazeazaez';
angularApp
.handle(req, {
providers: [
{
provide: CSP_NONCE,
useValue: nonce,
},
],
})
.then((response) =>
response ? writeResponseToNodeResponse(response, res) : next(),
)
.catch(next);
});
Was ich versucht habe
- Lesen der Nonce aus einem benutzerdefinierten Antwortheader
- Bereitstellen von CSP_NONCE während des SSR-Renderings
- Ersetzen von Werten direkt in HTML mit Apache ()
Code: Select all
mod_substitute - Mehrere alternative Ansätze sowohl auf Apache- als auch auf Node-Seite
Fragen
- Ist es für Angular SSR tatsächlich möglich, ein von Apache generiertes Nonce zu verbrauchen?
- Ist dieser Ansatz grundlegend fehlerhaft und sollte die Nonce nur vom Node-SSR-Server generiert werden?
- Wenn Apache verwendet wird, wie kann eine Nonce dann korrekt an Angular SSR weitergeleitet werden?
- Gibt es funktionierende Referenzimplementierungen für Angular SSR + striktes CSP (kein Unsafe-Inline)?
Mobile version