Environment: Nginx, Node.js,Digital Ocean Droplet
В документации для директивы add_header указано, что ее можно использовать в контексте http
, server
или location
.
Однако, когда я добавляю свою политику безопасности контента в контекст http
или сервера
, он не обнаруживается, когда я тестирую его в https://csp-evaluator.withgoogle.com/ или https://securityheaders.com/ .
Когда я добавляю его в блок местоположения
, оба сайта его обнаруживают.
Пример заголовка:
add_header content-security-policy "default-src 'self';"
Мой nginx.conf
имеет 5 блоков location
, один используется в качестве прокси. Нужно ли мне добавлять content-security-policy
к каждому блоку или есть способ лучше?
location ~* \.(jpg|png|svg|webp|ico)$ { }
location ~* \.(css)$ { }
location ~* \.(htm|html)$ { }
location ~* \.(js)$ { }
location / {
proxy_pass http://127.0.0.1:9999;
}
Также мне нужно добавлять все остальные мои основные заголовки безопасности в каждый блок? Это кажется избыточным, но если это единственный способ защитить сайт, я сделаю это.
Директива add_header
имеет интересное свойство. Из документации:
Может быть несколько директив
add_header
. Эти директивы наследуются от предыдущего уровня конфигурации тогда и только тогда, когда на текущем уровне не определены директивыadd_header
.
Это означает, что если вы добавляете другие заголовки в один из этих блоков location
, то любые директивы add_header
с сервера
или Блоки http
необходимо будет повторить.
Рассмотрите возможность использования файлов include
d для организации подобных директив, которые вам, возможно, придется повторить.