2727#define NGX_HTTP_RP_HEADER_STRICT_ORIG_WHEN_CROSS 7
2828#define NGX_HTTP_RP_HEADER_UNSAFE_URL 8
2929
30- /* ngx_hide_header macros */
31- #define ngx_hide_header (r , name ) \
32- ngx_str_set(&key, name); \
33- ngx_str_set(&val, ""); \
34- ngx_set_headers_out_by_search(r, &key, &val);
35-
36-
3730typedef struct {
3831 ngx_flag_t enable ;
3932 ngx_flag_t hide_server_tokens ;
@@ -48,6 +41,35 @@ typedef struct {
4841
4942} ngx_http_security_headers_loc_conf_t ;
5043
44+ static ngx_str_t empty_val = ngx_string ("" );
45+
46+ static ngx_str_t hide_headers [] = {
47+ ngx_string ("x-powered-by" ),
48+ ngx_string ("x-cf-powered-by" ),
49+ ngx_string ("via" ),
50+ ngx_string ("x-amz-cf-id" ),
51+ ngx_string ("x-amz-cf-pop" ),
52+ ngx_string ("x-page-speed" ),
53+ ngx_string ("x-varnish" ),
54+ ngx_string ("x-cache" ),
55+ ngx_string ("x-cache-hits" ),
56+ ngx_string ("x-cache-status" ),
57+ ngx_string ("x-application-version" ),
58+ ngx_string ("x-hudson" ),
59+ ngx_string ("x-hudson-theme" ),
60+ ngx_string ("x-instance-identity" ),
61+ ngx_string ("x-jenkins" ),
62+ ngx_string ("x-jenkins-session" ),
63+ ngx_string ("x-envoy-upstream-service-time" ),
64+ ngx_string ("x-drupal-cache" ),
65+ ngx_string ("x-generator" ),
66+ ngx_string ("x-backend-server" ),
67+ ngx_string ("x-wix-request-id" ),
68+ ngx_string ("x-request-id" ),
69+ ngx_string ("x-sucuri-id" ),
70+ ngx_string ("x-hacker" )
71+ };
72+
5173static ngx_conf_enum_t ngx_http_xss_protection [] = {
5274 { ngx_string ("off" ), NGX_HTTP_XSS_HEADER_OFF },
5375 { ngx_string ("on" ), NGX_HTTP_XSS_HEADER_ON },
@@ -229,30 +251,11 @@ ngx_http_security_headers_filter(ngx_http_request_t *r)
229251 }
230252 h_server -> hash = 0 ;
231253
232- ngx_hide_header (r , "x-powered-by" );
233- ngx_hide_header (r , "x-cf-powered-by" );
234- ngx_hide_header (r , "via" );
235- ngx_hide_header (r , "x-amz-cf-id" );
236- ngx_hide_header (r , "x-amz-cf-pop" );
237- ngx_hide_header (r , "x-page-speed" );
238- ngx_hide_header (r , "x-varnish" );
239- ngx_hide_header (r , "x-cache" );
240- ngx_hide_header (r , "x-cache-hits" );
241- ngx_hide_header (r , "x-cache-status" );
242- ngx_hide_header (r , "x-application-version" );
243- ngx_hide_header (r , "x-hudson" );
244- ngx_hide_header (r , "x-hudson-theme" );
245- ngx_hide_header (r , "x-instance-identity" );
246- ngx_hide_header (r , "x-jenkins" );
247- ngx_hide_header (r , "x-jenkins-session" );
248- ngx_hide_header (r , "x-envoy-upstream-service-time" );
249- ngx_hide_header (r , "x-drupal-cache" );
250- ngx_hide_header (r , "x-generator" );
251- ngx_hide_header (r , "x-backend-server" );
252- ngx_hide_header (r , "x-wix-request-id" );
253- ngx_hide_header (r , "x-request-id" );
254- ngx_hide_header (r , "x-sucuri-id" );
255- ngx_hide_header (r , "x-hacker" );
254+ size_t hide_headers_count = sizeof (hide_headers ) / sizeof (hide_headers [0 ]);
255+
256+ for (size_t i = 0 ; i < hide_headers_count ; ++ i ) {
257+ ngx_set_headers_out_by_search (r , & hide_headers [i ], & empty_val );
258+ }
256259 }
257260
258261 if (1 != slcf -> enable ) {
0 commit comments