@@ -14,6 +14,7 @@ set -euo pipefail
1414# - NGINX_CSP_IMG_SRC: defaults to 'https:'
1515# - NGINX_CSP_MANIFEST_SRC: defaults to ''
1616# - NGINX_CSP_MEDIA_SRC: defaults to 'https:'
17+ # - NGINX_CSP_MODE: defaults to 'enforce'
1718# - NGINX_CSP_OBJECT_SRC: defaults to ''
1819# - NGINX_CSP_REPORT_URI: defaults to ''
1920# - NGINX_CSP_SCRIPT_SRC: defaults to ''
@@ -31,13 +32,24 @@ NGINX_CSP_FRAME_SRC="${NGINX_CSP_FRAME_SRC:-https://youtube.com https://www.yout
3132NGINX_CSP_IMG_SRC=" ${NGINX_CSP_IMG_SRC:- https: } "
3233NGINX_CSP_MANIFEST_SRC=" ${NGINX_CSP_MANIFEST_SRC:- } "
3334NGINX_CSP_MEDIA_SRC=" ${NGINX_CSP_MEDIA_SRC:- https: } "
35+ NGINX_CSP_MODE=" ${NGINX_CSP_MODE:- enforce} "
3436NGINX_CSP_OBJECT_SRC=" ${NGINX_CSP_OBJECT_SRC:- } "
3537NGINX_CSP_REPORT_URI=" ${NGINX_CSP_REPORT_URI:- } "
3638NGINX_CSP_SCRIPT_SRC=" ${NGINX_CSP_SCRIPT_SRC:- } "
3739NGINX_CSP_STYLE_SRC=" ${NGINX_CSP_STYLE_SRC:- https:// fonts.googleapis.com} "
3840NGINX_CSP_WORKER_SRC=" ${NGINX_CSP_WORKER_SRC:- } "
3941NGINX_FRAME_OPTIONS=" ${NGINX_FRAME_OPTIONS:- deny} "
4042
43+ # Validate input
44+ if [ " ${NGINX_CSP_MODE} " = ' enforce' ]; then
45+ NGINX_CSP_HEADER_NAME=' Content-Security-Policy'
46+ elif [ " ${NGINX_CSP_MODE} " = ' report-only' ]; then
47+ NGINX_CSP_HEADER_NAME=' Content-Security-Policy-Report-Only'
48+ else
49+ echo " Nginx: invalid CSP mode ${NGINX_CSP_MODE} "
50+ exit 1
51+ fi
52+
4153if [ -d /etc/nginx/site-mods-enabled.d/ ]; then
4254 # nginx frame options header
4355 if [ " ${NGINX_FRAME_OPTIONS} " != ' disable' ]; then
5062 # nginx content policy
5163 echo " Nginx: configuring content security policy…"
5264 cat << EOF >> /etc/nginx/site-mods-enabled.d/00-generated-security.conf
53- add_header 'Content-Security-Policy ' "\
65+ add_header '${NGINX_CSP_HEADER_NAME} ' "\
5466default-src 'self'; \
5567child-src 'self' data: blob: ${NGINX_CSP_CHILD_SRC} ; \
5668connect-src 'self' data: blob: ${NGINX_CSP_CONNECT_SRC} ; \
0 commit comments