При создании веб-приложения с разделенными внешним и внутренним интерфейсом (без рендеринга на стороне сервера) Я все еще хочу использовать одноразовый номер CSP. Обычно заголовок CSP и html должны содержать один и тот же одноразовый номер, что не проблема с SSR, но кажется невозможным без SSR.
Теперь я подумал о другом способе использования nonce без SSR:
- Сервер: Помимо отправки одноразового номера с заголовком CSP, также отправьте его в виде файла cookie (все еще меняющегося для каждого запроса!) Это также распространенный подход для CSRF
- Пользовательский интерфейс: вместо того, чтобы включать
<script>
, которому требуется одноразовый номер непосредственно внутри html, скорее загружайте его динамически из моего собственного скрипта:
const script = document.createElement('script')
script.setAttribute('src', 'https://example.com')
script.setAttribute('data-csp-nonce', getCspNonceFromCookie())
document.head.appendChild(script);
Является ли это допустимым подходом к этой проблеме? Есть ли опасения по поводу безопасности?