Я хочу добавить следующую директиву 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] является достаточно случайным значением.
Нотсес, который вы установили в заголовке CSP, должен быть таким же, как и тег вашего скрипта. Вот почему он, как правило, устанавливается на уровне приложения, где значение сохранения может быть использован в заголовке HTTP и в вашем HTML. Если вы установите его на уровне Apache, как вы используете его в вашем приложении?
.@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>