Я бы хотел установить политика безопасности контента заголовок для веб-сайта 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.