Mitigate XSS Attacks with Content Security Policy

Как и было обещано, эта функция теперь включена по умолчанию: CSP Frame Ancestors enabled by default

10 лайков

Здравствуйте,

Я сейчас настраиваю Google AdSense на своём сайте и, похоже, у меня отсутствует настройка «Включить сбор отчетов о нарушениях CSP по адресу /csp_reports». Я самостоятельно размещаю Discourse версии 2.9.0.beta6.

Выше, в цитате, скриншот отсутствующей настройки.


Выше — моя страница настроек CSP, где отсутствует пункт «Включить сбор отчетов о нарушениях CSP по адресу /csp_reports».

Буду признателен за любую помощь! И, пожалуйста, подскажите, правильно ли я настроил параметры для AdSense — я раньше никогда с ним не работал :eyes:!

3 лайка

Приносим извинения: мои предыдущие ответы здесь устарели, так как примерно месяц назад мы сделали content_security_policy_collect_reports скрытой настройкой. Вы всё ещё можете её включить, но только через консоль Rails, например:

./launcher enter app
...
rails c
...
SiteSetting.content_security_policy_collect_reports = true

Обратите внимание, что это создаёт очень много шума в логах. Мы настоятельно не рекомендуем идти этим путём; вместо этого просто включите CSP и проверяйте сайт с открытой консолью браузера в нескольких браузерах (Chrome, Firefox, Safari). Так вы обнаружите большинство проблем. Кроме того, с вашей текущей конфигурацией вы фактически разрешаете почти всё то, от чего защищает CSP, поэтому вам, скорее всего, не понадобятся отчёты.

6 лайков

Возможно, я что-то упускаю, но я не вижу этих настроек в интерфейсе настроек.

  • content_security_policy
  • content_security_policy_report_only
  • content_security_policy_collect_reports (вижу, что сейчас она скрыта)
  • content_security_policy_script_src

Доступны ли эти опции для размещённых экземпляров? В оригинальном посте или комментариях я не нашёл упоминаний о том, что это ограничение.

Редактирование: Также попытался установить политику безопасности через тему.

Кажется, это не работает так, как описано в оригинальном посте.

Я предполагаю, что мой тарифный план для размещённой версии не позволяет этого делать, даже если действовать через тему или компонент темы?

Или, возможно, я просто что-то делаю совершенно неправильно.

1 лайк

В настоящее время Discourse по умолчанию предоставляет политику CSP уровня 2 со следующими директивами:

  • base-uri ограничивает URL-адреса для элемента <base>

Существует ли возможность переопределить значение по умолчанию для заголовка base-uri?

1 лайк

Где на самом деле используются элементы <base> в дискурсе?

Не сломает ли это push-уведомления в Discourse?

Может быть. Возможно, потребуется более подходящая настройка.

1 лайк

Пост был разделён на новую тему: Какой метод рекомендуется для использования защищённых изображений?

Здравствуйте,
Подскажите, пожалуйста, как обойти проблему, описанную ниже? Я добавил скрипт, вызывающий новое выражение Function(), в директиву content_security_policy_script_src, но консоль браузера по-прежнему выдает следующую ошибку. Где можно исключить unsafe-eval? Спасибо!

Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive:

1 лайк

Приношу извинения. Пожалуйста, проигнорируйте мой предыдущий пост, если мои следующие замечания верны. Я понял из предыдущих сообщений, что можно напрямую установить значение ‘unsafe-eval’ для content_security_policy_script_src, и теперь в консоли больше не сообщается об ошибках JavaScript.

1 лайк

Возможно, стоит посмотреть на настройку сайта content security policy script src?

1 лайк

Да. Как указывалось в предыдущих ответах, «unsafe-eval» можно добавить непосредственно в content_security_policy_script_src. Я думал, что разрешено добавлять только базовый URL или полный URL.

1 лайк