На стороне Apache я могу правильно сгенерировать nonce с помощью mod_cspnonce:
Код: Выделить всё
LoadModule headers_module modules/mod_headers.so
LoadModule cspnonce_module modules/mod_cspnonce.so
Header always set X-Debug-Nonce "%{CSP_NONCE}e"
Проблема
На стороне Angular SSR (Node/Express) я не могу получить этот nonce и внедрить его в контекст рендеринга Angular.
Ничего не происходит: Angular не делает не отображать атрибуты nonce в тегах или .
Код промежуточного программного обеспечения SSR
Код: Выделить всё
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);
});
Что я пробовал
- Чтение nonce из пользовательского заголовка ответа
- Предоставление CSP_NONCE во время SSR-рендеринга
- Непосредственная замена значений в HTML с использованием Apache ()
Код: Выделить всё
mod_substitute - Несколько альтернативных подходов как на стороне Apache, так и на стороне Node.
Вопросы
- Возможно ли Angular SSR использовать nonce, сгенерированный Apache?
- Является ли этот подход фундаментально ошибочным, и должен ли nonce генерироваться только сервером Node SSR?
- Если используется Apache, каков правильный способ пересылки nonce в Angular SSR?
- Существуют ли какие-либо рабочие эталонные реализации для Angular SSR + strict CSP (no unsafe-inline)?
Подробнее здесь: https://stackoverflow.com/questions/798 ... che-and-an
Мобильная версия