Как ввести случайный одноразовый номер CSP в APACHE?

Я хочу добавить следующую директиву CSP в APACHE, потому что я хочу, чтобы она применялась на каждом страница.

<IfModule mod_headers.c>
    <FilesMatch "\.(htm|html|php)$">
        Content-Security-Policy: script-src 'strict-dynamic' 'nonce-{random}' 'unsafe-inline' ' https:;
    </FilesMatch>
</IfModule>

Я также хотел бы сгенерировать значение {random} непосредственно в APACHE (если возможно).

Можно ли сгенерировать и вставить его непосредственно в директиву APACHE CSP? Или это плохая идея, я должен сгенерировать и вставить вместо этого на уровне приложения (PHP)?

ПРИМЕЧАНИЕ: Я нашел то, что Генерировать одноразовый номер с помощью Apache 2.4 (для заголовка политики безопасности контента) выглядело многообещающе, но я не уверен, действительно ли $ _SERVER [UNIQUE_ID] является достаточно случайным значением.

1
задан 16 June 2017 в 14:14
2 ответа

Нотсес, который вы установили в заголовке CSP, должен быть таким же, как и тег вашего скрипта. Вот почему он, как правило, устанавливается на уровне приложения, где значение сохранения может быть использован в заголовке HTTP и в вашем HTML. Если вы установите его на уровне Apache, как вы используете его в вашем приложении?

.
1
ответ дан 3 December 2019 в 23:29

@user3526609 получает признание за это замечательное решение, но я хотел обобщить его, чтобы прояснить для всех, таких как я, которые повсюду искали это и нашли его похороненным в комментарии.

Вкратце, это то, как создать одноразовый номер CSP в файле .htaccess, а не в веб-приложении, но при этом иметь возможность использовать его в веб-приложении.

Вы можете «сгенерировать» одноразовый номер с помощью Apache, повторно используя уникальный идентификатор, который он создает для каждого запроса. Создайте заголовок Content Security Policy следующим образом (многие другие важные элементы исключены для краткости):

Header always set Content-Security-Policy "\
  default-src 'self'; \
  script-src 'self' 'nonce-%{UNIQUE_ID}e';"

Обратите внимание, что обратная косая черта разбивает команду на хорошо читаемые строки, которые позже будут удалены Apache.

Это создает примерно следующее:

'nonce-STRINGofRANDOMcharacters'

И PHP может получить к нему доступ следующим образом:

$_SERVER['UNIQUE_ID']

Пример на веб-странице:

<script 
  src="https://www.google.com/recaptcha/api.js?render=your-site-key"
  nonce="nonce-<?php echo $_SERVER['UNIQUE_ID']; ?>">
</script>
2
ответ дан 21 July 2021 в 14:46

Теги

Похожие вопросы