это очень надежно?
Да. Установка этого заголовка в декораторе app.after_request
применяет заголовок ко всем маршрутам, обслуживаемым этим app
.
Что, если я применяю CSP непосредственно в шаблоне HTML (jinja2), это то, что возможно?
Не то, что можно сделать в самом шаблоне, вы бы установили этот заголовок внутри Python, как указано выше.
Что более надежно?
Хотя первый метод (через декоратор app.after_request
) работает, обычно это то, что может обрабатываться обратным прокси-сервером, за которым находится ваш Python сервер приложений. Если это вам незнакомо, посмотрите документацию по развертыванию .
Например, используя nginx в качестве обратного прокси-сервера, вы можете поместить это в свой блок server
:
add_header Content-Security-Policy "default-src 'self';";
Или, чтобы отправить заголовок независимо от кода ответа:
add_header Content-Security-Policy "default-src 'self';" always;
В этом блоге есть несколько хороших советов о том, разрешить ли обратному прокси-серверу обрабатывать отправку этого заголовка или определить это в вашем приложении Flask:
Должен ли я добавлять заголовок CSP с помощью nginx или мое в приложении? Хотя, конечно, легко добавить заголовок CSP с помощью nginx, также можно добавить заголовок Content-Security-Policy
с языком программирования на стороне сервера ([Flask]). В любом случае есть компромиссы. Если у вас есть разделы вашего приложения, для которых может потребоваться другая политика CSP, тогда, возможно, будет проще использовать ваш язык программирования приложений. Или, если вы планируете использовать такие функции, как CSP nonce , тогда гораздо проще установить Content-Security-Policy
из кода вашего приложения, а не из nginx.
Кроме того, если вы развертываете платформу, такую как Heroku, которая в базовой конфигурации c напрямую предоставляет сервер приложений Gunicorn, тогда, вероятно, будет проще установить этот заголовок в своем приложении, если вы не планируете go дальше и развернуть nginx buildpack.
Другие облачные балансировщики нагрузки могут предоставлять свой собственный способ установки этих заголовков, независимо от вашего приложения.
? При настройке обратного прокси-сервера или балансировщика нагрузки на него стоит обратить внимание at Генератор конфигурации SSL Mozilla , который поддерживает nginx, AWS ALB / ELB и другие. Затем сервер можно протестировать с помощью Qualys SSL test .