Это продолжение https://github.com/w3c/webappsec-csp/issues/215. arturjanc предложил перенести это обсуждение в stackoverflow.
Мы пытаемся внедрить CSP для сценариев в JSF и не знаем, безопасно ли повторно использовать одноразовый номер сценария на протяжении всего сеанса. Или, как предложил arturjanc, исходный документ отправляет свой текущий одноразовый номер на сервер, который генерирует будущие ответы.
Предполагая, что небезопасно повторно использовать одноразовый номер на протяжении всего сеанса, можно ли просто включить начальный одноразовый номер в скрытую форму ввода, как это реализовано в настоящее время " rel="nofollow noreferrer">здесь. (на данный момент игнорируя уязвимости CSP-заголовка/XSS-инъекций - это всего лишь прототип)
@arturjanc: Хотите еще раз присоединиться?
Изменить: Дополнительные мысли относительно ответа Артурьянка:
Не могли бы вы подробнее рассказать о том, как реализовать одноразовые номера для каждого ответа в типичном приложении JSF в настоящее время, то есть просто иметь одну полную загрузку страницы в самом начале и последующую связь только XHR?
Если я правильно вас понимаю, вы предлагаете всегда повторно отправлять первоначально сгенерированный одноразовый номер в каждом запросе XHR. Однако на практике это практически то же самое, что и одноразовые номера за сеанс, не так ли? Просто сложнее с точки зрения реализации.
Строгая реализация одноразовых номеров для каждого ответа подразумевала бы, что последующие ответы также должны включать все одноразовые номера, созданные ранее в этом сеансе, поэтому мы каким-то образом отслеживали бы все одноразовые номера сеанса.
Установка новых заголовков CSP для каждого XHR-ответа, содержащего только вновь созданный одноразовый номер для каждого ответа, вероятно, не будет работать из-за того, что браузеры обрабатывают несколько заголовков CSP в ответах, объединяя их с использованием стратегии пересечения, т. е. Content-Security-Policy: 'nonce-1'
в ответе 1 и Content-Security-Policy: 'nonce-2'
в ответе 2. сделает оба одноразовых номера недействительными после ответа 2.