Назад | Перейти на главную страницу

Несовместима ли установка политики безопасности контента со страницей администратора Joomla?

Я бы хотел установить политика безопасности контента заголовок для веб-сайта Joomla, работающего на Apache 2.4.

С помощью эта конфигурация от h5bp и установка Header set Content-Security-Policy "script-src 'self'; object-src 'self'" дает мне пустую страницу для страницы входа в Joomla по адресу www.example.com/administrator/. Как я могу использовать эту политику и по-прежнему авторизоваться?

При проверке консоли появляется сообщение об ошибке:

Политика безопасности контента: настройки страницы заблокировали загрузку ресурса на себя ("script-src http://www.example.com").

Страница администратора полностью обслуживается с example.com, сторонний контент отсутствует. Сайт работает отлично, за исключением пустой страницы на странице входа с установленной политикой. Если проверить источник страницы / administrator, он выглядит совершенно обычным, за исключением того, что JS не запущен. Копия полный источник страницы здесь.

Поскольку у меня есть белый список example.com с "script-src 'self'; object-src 'self'", я ожидаю, что страница будет отображаться, но мне явно чего-то не хватает.

Теперь я повторно протестировал это с новым VPS и чистой установкой Joomla без каких-либо настроек. Установка политики безопасности контента и перезапуск Apache немедленно воспроизводят проблему - полностью пустая страница администратора с сопутствующей ошибкой консоли в браузере с жалобой на политику, блокирующую загрузку ресурсов. Изменение "script-src 'self' к "script-src 'example.com' или "script-src 'IP:AD:DR:ESS' не помогает, все скрипты заблокированы, точка.

Есть идеи, как заставить это работать или устранить неполадки?

После просмотра исходного кода выясняется, что сообщение об ошибке ошибочно и вводит в заблуждение. Похоже, что причиной вашей проблемы является наличие нескольких встроенных элементов JavaScript. Другими словами, определяемая вами политика допускает такой контент:

<script src="/media/myjsfile.js"></script>

Но не так:

<script>function myJsFunction()</script>

Чтобы разрешить встроенный JavaScript (не рекомендуется, так как это противоречит цели использования CSP), вам нужно изменить свою политику примерно так:

script-src 'self' 'unsafe-inline'

Кроме того, вы можете провести рефакторинг кода, чтобы не использовать встроенный JS, или воспользоваться преимуществами атрибут nonce. Имейте в виду, что поддержка атрибута nonce в настоящее время присутствует не во всех браузерах (это часть последней спецификации политики безопасности контента). Насколько мне известно, в настоящее время он поддерживается только в Chrome.