HSTS preload + X-XSS enablespull/1083/head
| @@ -287,6 +287,26 @@ matrix_nginx_proxy_proxy_domain_additional_server_configuration_blocks: [] | |||||
| # Of course, a better solution is to just stop using browsers (like Chrome), which participate in such tracking practices. | # Of course, a better solution is to just stop using browsers (like Chrome), which participate in such tracking practices. | ||||
| matrix_nginx_proxy_floc_optout_enabled: true | matrix_nginx_proxy_floc_optout_enabled: true | ||||
| # HSTS Preloading Enable | |||||
| # | |||||
| # In its strongest and recommended form, the [HSTS policy](https://www.chromium.org/hsts) includes all subdomains, and | |||||
| # indicates a willingness to be “preloaded” into browsers: | |||||
| # `Strict-Transport-Security: max-age=31536000; includeSubDomains; preload` | |||||
| # For more information visit: | |||||
| # - https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security | |||||
| # - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security | |||||
| # - https://hstspreload.org/#opt-in | |||||
| matrix_nginx_proxy_hsts_preload_enabled: false | |||||
| # X-XSS-Protection Enable | |||||
| # Stops pages from loading when they detect reflected cross-site scripting (XSS) attacks. | |||||
| # Note: Not applicable for grafana | |||||
| # | |||||
| # Learn more about it is here: | |||||
| # - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection | |||||
| # - https://portswigger.net/web-security/cross-site-scripting/reflected | |||||
| matrix_nginx_proxy_xss_protection: "1; mode=block" | |||||
| # Specifies the SSL configuration that should be used for the SSL protocols and ciphers | # Specifies the SSL configuration that should be used for the SSL protocols and ciphers | ||||
| # This is based on the Mozilla Server Side TLS Recommended configurations. | # This is based on the Mozilla Server Side TLS Recommended configurations. | ||||
| # | # | ||||
| @@ -9,6 +9,14 @@ | |||||
| {% if matrix_nginx_proxy_floc_optout_enabled %} | {% if matrix_nginx_proxy_floc_optout_enabled %} | ||||
| add_header Permissions-Policy interest-cohort=() always; | add_header Permissions-Policy interest-cohort=() always; | ||||
| {% endif %} | {% endif %} | ||||
| {% if matrix_nginx_proxy_hsts_preload_enabled %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; | |||||
| {% else %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% endif %} | |||||
| add_header X-XSS-Protection "{{ matrix_nginx_proxy_xss_protection }}"; | |||||
| {% for configuration_block in matrix_nginx_proxy_proxy_domain_additional_server_configuration_blocks %} | {% for configuration_block in matrix_nginx_proxy_proxy_domain_additional_server_configuration_blocks %} | ||||
| {{- configuration_block }} | {{- configuration_block }} | ||||
| @@ -3,8 +3,12 @@ | |||||
| {% macro render_vhost_directives() %} | {% macro render_vhost_directives() %} | ||||
| gzip on; | gzip on; | ||||
| gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | ||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% if matrix_nginx_proxy_hsts_preload_enabled %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; | |||||
| {% else %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% endif %} | |||||
| add_header X-XSS-Protection "{{ matrix_nginx_proxy_xss_protection }}"; | |||||
| add_header X-Content-Type-Options nosniff; | add_header X-Content-Type-Options nosniff; | ||||
| {% for configuration_block in matrix_nginx_proxy_proxy_bot_go_neb_additional_server_configuration_blocks %} | {% for configuration_block in matrix_nginx_proxy_proxy_bot_go_neb_additional_server_configuration_blocks %} | ||||
| @@ -4,13 +4,20 @@ | |||||
| gzip on; | gzip on; | ||||
| gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | ||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% if matrix_nginx_proxy_hsts_preload_enabled %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; | |||||
| {% else %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% endif %} | |||||
| add_header X-Content-Type-Options nosniff; | add_header X-Content-Type-Options nosniff; | ||||
| add_header X-XSS-Protection "{{ matrix_nginx_proxy_xss_protection }}"; | |||||
| add_header X-Frame-Options SAMEORIGIN; | add_header X-Frame-Options SAMEORIGIN; | ||||
| {% if matrix_nginx_proxy_floc_optout_enabled %} | {% if matrix_nginx_proxy_floc_optout_enabled %} | ||||
| add_header Permissions-Policy interest-cohort=() always; | add_header Permissions-Policy interest-cohort=() always; | ||||
| {% endif %} | {% endif %} | ||||
| {% for configuration_block in matrix_nginx_proxy_proxy_element_additional_server_configuration_blocks %} | {% for configuration_block in matrix_nginx_proxy_proxy_element_additional_server_configuration_blocks %} | ||||
| {{- configuration_block }} | {{- configuration_block }} | ||||
| {% endfor %} | {% endfor %} | ||||
| @@ -4,10 +4,14 @@ | |||||
| gzip on; | gzip on; | ||||
| gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | ||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% if matrix_nginx_proxy_hsts_preload_enabled %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; | |||||
| {% else %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% endif %} | |||||
| add_header X-XSS-Protection "{{ matrix_nginx_proxy_xss_protection }}"; | |||||
| add_header X-Content-Type-Options nosniff; | add_header X-Content-Type-Options nosniff; | ||||
| add_header X-Frame-Options SAMEORIGIN; | add_header X-Frame-Options SAMEORIGIN; | ||||
| add_header X-XSS-Protection "1; mode=block"; | |||||
| add_header Content-Security-Policy "frame-ancestors 'none'"; | add_header Content-Security-Policy "frame-ancestors 'none'"; | ||||
| {% if matrix_nginx_proxy_floc_optout_enabled %} | {% if matrix_nginx_proxy_floc_optout_enabled %} | ||||
| add_header Permissions-Policy interest-cohort=() always; | add_header Permissions-Policy interest-cohort=() always; | ||||
| @@ -3,8 +3,12 @@ | |||||
| {% macro render_vhost_directives() %} | {% macro render_vhost_directives() %} | ||||
| gzip on; | gzip on; | ||||
| gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | ||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% if matrix_nginx_proxy_hsts_preload_enabled %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; | |||||
| {% else %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% endif %} | |||||
| add_header X-XSS-Protection "{{ matrix_nginx_proxy_xss_protection }}"; | |||||
| add_header X-Content-Type-Options nosniff; | add_header X-Content-Type-Options nosniff; | ||||
| {% if matrix_nginx_proxy_floc_optout_enabled %} | {% if matrix_nginx_proxy_floc_optout_enabled %} | ||||
| add_header Permissions-Policy interest-cohort=() always; | add_header Permissions-Policy interest-cohort=() always; | ||||
| @@ -20,6 +20,14 @@ | |||||
| {% if matrix_nginx_proxy_floc_optout_enabled %} | {% if matrix_nginx_proxy_floc_optout_enabled %} | ||||
| add_header Permissions-Policy interest-cohort=() always; | add_header Permissions-Policy interest-cohort=() always; | ||||
| {% endif %} | {% endif %} | ||||
| {% if matrix_nginx_proxy_hsts_preload_enabled %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; | |||||
| {% else %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% endif %} | |||||
| add_header X-XSS-Protection "{{ matrix_nginx_proxy_xss_protection }}"; | |||||
| location /.well-known/matrix { | location /.well-known/matrix { | ||||
| root {{ matrix_static_files_base_path }}; | root {{ matrix_static_files_base_path }}; | ||||
| @@ -4,7 +4,11 @@ | |||||
| gzip on; | gzip on; | ||||
| gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | ||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; | |||||
| {% if matrix_nginx_proxy_hsts_preload_enabled %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; | |||||
| {% else %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% endif %} | |||||
| # duplicate X-Content-Type-Options & X-Frame-Options header | # duplicate X-Content-Type-Options & X-Frame-Options header | ||||
| # Enabled by grafana by default | # Enabled by grafana by default | ||||
| # add_header X-Content-Type-Options nosniff; | # add_header X-Content-Type-Options nosniff; | ||||
| @@ -3,8 +3,12 @@ | |||||
| {% macro render_vhost_directives() %} | {% macro render_vhost_directives() %} | ||||
| gzip on; | gzip on; | ||||
| gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | ||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% if matrix_nginx_proxy_hsts_preload_enabled %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; | |||||
| {% else %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% endif %} | |||||
| add_header X-XSS-Protection "{{ matrix_nginx_proxy_xss_protection }}"; | |||||
| add_header X-Content-Type-Options nosniff; | add_header X-Content-Type-Options nosniff; | ||||
| {% if matrix_nginx_proxy_floc_optout_enabled %} | {% if matrix_nginx_proxy_floc_optout_enabled %} | ||||
| add_header Permissions-Policy interest-cohort=() always; | add_header Permissions-Policy interest-cohort=() always; | ||||
| @@ -4,6 +4,14 @@ | |||||
| {% if matrix_nginx_proxy_floc_optout_enabled %} | {% if matrix_nginx_proxy_floc_optout_enabled %} | ||||
| add_header Permissions-Policy interest-cohort=() always; | add_header Permissions-Policy interest-cohort=() always; | ||||
| {% endif %} | {% endif %} | ||||
| {% if matrix_nginx_proxy_hsts_preload_enabled %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; | |||||
| {% else %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% endif | |||||
| add_header X-XSS-Protection "{{ matrix_nginx_proxy_xss_protection }}"; | |||||
| {% for configuration_block in matrix_nginx_proxy_proxy_riot_additional_server_configuration_blocks %} | {% for configuration_block in matrix_nginx_proxy_proxy_riot_additional_server_configuration_blocks %} | ||||
| {{- configuration_block }} | {{- configuration_block }} | ||||
| @@ -3,8 +3,12 @@ | |||||
| {% macro render_vhost_directives() %} | {% macro render_vhost_directives() %} | ||||
| gzip on; | gzip on; | ||||
| gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | ||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% if matrix_nginx_proxy_hsts_preload_enabled %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; | |||||
| {% else %} | |||||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||||
| {% endif %} | |||||
| add_header X-XSS-Protection "{{ matrix_nginx_proxy_xss_protection }}"; | |||||
| add_header X-Content-Type-Options nosniff; | add_header X-Content-Type-Options nosniff; | ||||
| add_header X-Frame-Options DENY; | add_header X-Frame-Options DENY; | ||||