Есть хорошие статьи, объясняющие варианты CSP, такие как эта:
http://www.html5rocks.com/en/tutorials/security/content-security-policy/
Возможно, это совершенно очевидно, потому что я не могу найти хороших примеров, но как вы на самом деле реализуете CSP на практике?
В PHP вы можете установить заголовок на странице, которую вы обслуживаете, но что, если у вас просто есть HTML-файл? Вы должны сделать это через ваш веб-сервер, Apache или подобное? Это не кажется легким подходом.
Какова лучшая практика здесь? На каждой отдельной странице должен быть установлен заголовок вручную?
Спасибо!
Это не кажется легким подходом.
Да, это не так. Однако есть несколько умных ярлыков.
как вы на самом деле внедряете 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.
В конце дня выбор за вами.
Вы можете установить его глобально в вашем веб-сервере 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>
Если вы используете 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