Как реализовать политику безопасности контента?

Есть хорошие статьи, объясняющие варианты CSP, такие как эта:
http://www.html5rocks.com/en/tutorials/security/content-security-policy/

Возможно, это совершенно очевидно, потому что я не могу найти хороших примеров, но как вы на самом деле реализуете CSP на практике?

В PHP вы можете установить заголовок на странице, которую вы обслуживаете, но что, если у вас просто есть HTML-файл? Вы должны сделать это через ваш веб-сервер, Apache или подобное? Это не кажется легким подходом.

Какова лучшая практика здесь? На каждой отдельной странице должен быть установлен заголовок вручную?

Спасибо!

3

Решение

Это не кажется легким подходом.

Да, это не так. Однако есть несколько умных ярлыков.

как вы на самом деле внедряете CSP на практике?

В PHP вы можете установить заголовок на странице, которую вы обслуживаете, но что, если у вас просто есть HTML-файл? Вы должны сделать это через ваш веб-сервер, Apache или подобное? Это не кажется легким подходом.

Я написал PHP-скрипт командной строки, который взял JSON-объект типа блока кода A, собрал строку, которая выглядит как блок кода B, и сохранил ее в отдельный файл.

A:

{
"script-src": [ "self",  "https://apis.google.com" ]
}

B:

add_header Content-Security-Policy "script-src: 'self' https://apis.google.com";

Затем я добавил строку, чтобы настроить мою конфигурацию nginx для этого виртуального хоста, чтобы включить сгенерированную директиву CSP:

include /path/to/script/output.conf;

Вследствие этой системы, если я хотел внести изменения в заголовки CSP, мне нужно только отредактировать файл JSON.

И вот как я сделал заголовки CSP простыми в управлении. Ваш пробег может отличаться.

Вот: CSP Builder.

1

Другие решения

В конце дня выбор за вами.
Вы можете установить его глобально в вашем веб-сервере Apache. В этом случае это будет применяться к каждой странице.
И затем вы также можете установить заголовки на отдельных страницах, если это требуется для более детального подхода.

Проверьте эти сайты на помощь в создании ваших правил CSP:

https://csp-evaluator.withgoogle.com/

https://report-uri.io/home/generate

Скотт Хельме много знает о предмете и имеет несколько хороших примеров.
Вы также можете отправить свои отчеты на его сайт для некоторого базового анализа.

https://scotthelme.co.uk/content-security-policy-an-introduction/

Это также может представлять интерес для конфигураций apache

Создайте одноразовый номер с помощью Apache 2.4 (для заголовка Content Security Policy)

Я также настоятельно рекомендую вам прочитать этот документ, в котором говорится о некоторых более новых (и более простых) подходах к конфигурации и обратной совместимости браузера

https://www.websec.be/blog/cspstrictdynamic/

А это также отличная статья «CSP Is Dead, Long Live CSP!» Из исследований Google, в частности, обратитесь к разделу 4. УЛУЧШЕНИЕ CSP, минуя белые списки и распространяя доверие.

https://research.google.com/pubs/pub45542.html

Много читайте, и когда вы будете готовы к реализации, используйте директиву режима REPORT ONLY, чтобы получать сообщения консоли без применения политики.

Content-Security-Policy-Report-Only: <policy-directive>; <policy-directive>

Как только вы счастливы, вы можете применять правила:

Content-Security-Policy: <policy-directive>; <policy-directive>
2

Если вы используете Apache, вы можете использовать .htaccess, чтобы сделать это

Поместите файл с именем .htaccess в путь вашего проекта (обычно что-то вроде)
/ var / www / myProject, если он не существует по другим причинам. В этом случае просто добавьте следующее правило заголовка:

Header set Content-Security-Policy "default-src 'self';
script-src 'self' www.google-apis.com *.cloudflare.com someotherDomain.com;
img-src 'self' *.cloudflare.com;
"

Теперь современные браузеры будут выполнять скрипты только с вашего домена, google-apis.com, cloudflare.com или someotherDomain.com.
Изображения будут загружаться только с вашего домена и облака.
Все остальное будет разрешено только с вашего домена.

Очень хороший источник:
ole.michelsen.dk

0