|
21 | 21 | var tlsRenegotiationEnabled = bool.TryParse(builder.Configuration["tlsRenegotiation"], out var tlsRenegotiationEnabledConfig) && tlsRenegotiationEnabledConfig;
|
22 | 22 | var certPublicKeySpecified = int.TryParse(builder.Configuration["certPublicKeyLength"], out var certPublicKeyConfig);
|
23 | 23 | var certPublicKeyLength = certPublicKeySpecified ? certPublicKeyConfig : 2048;
|
| 24 | +var enableHostHeaderValidation = bool.TryParse(builder.Configuration["enableHostHeaderValidation"], out var enableHostHeaderValidationConfig) && enableHostHeaderValidationConfig; |
24 | 25 |
|
25 | 26 | // endpoints
|
26 | 27 | var listeningEndpoints = builder.Configuration["urls"] ?? "https://localhost:5000/";
|
|
39 | 40 | var connectionIds = new HashSet<string>();
|
40 | 41 | var fetchedCertsCounter = 0;
|
41 | 42 |
|
42 |
| -builder.Services.Configure<Microsoft.AspNetCore.HostFiltering.HostFilteringOptions>(options => |
| 43 | +if (enableHostHeaderValidation) |
43 | 44 | {
|
44 |
| - var allowedHosts = new HashSet<string>(); |
45 |
| - foreach (var endpoint in listeningEndpoints.Split([';'], StringSplitOptions.RemoveEmptyEntries)) |
| 45 | + builder.Services.Configure<Microsoft.AspNetCore.HostFiltering.HostFilteringOptions>(options => |
46 | 46 | {
|
47 |
| - var urlPrefix = UrlPrefix.Create(endpoint); |
48 |
| - allowedHosts.Add(urlPrefix.Host); |
49 |
| - } |
| 47 | + var allowedHosts = new HashSet<string>(); |
| 48 | + foreach (var endpoint in listeningEndpoints.Split([';'], StringSplitOptions.RemoveEmptyEntries)) |
| 49 | + { |
| 50 | + var urlPrefix = UrlPrefix.Create(endpoint); |
| 51 | + allowedHosts.Add(urlPrefix.Host); |
| 52 | + } |
50 | 53 |
|
51 |
| - Console.WriteLine("Allowed Hosts: " + string.Join(';', allowedHosts)); |
52 |
| - options.AllowedHosts = allowedHosts.ToArray(); |
53 |
| - options.IncludeFailureMessage = false; // Suppress the failure message in response body |
54 |
| - options.AllowEmptyHosts = true; |
55 |
| -}); |
| 54 | + Console.WriteLine("Configured HostFilteringOptions. Hosts: " + string.Join(';', allowedHosts)); |
| 55 | + options.AllowedHosts = allowedHosts.ToArray(); |
| 56 | + options.IncludeFailureMessage = false; // Suppress the failure message in response body |
| 57 | + options.AllowEmptyHosts = true; |
| 58 | + }); |
| 59 | +} |
56 | 60 |
|
57 | 61 | builder.WebHost.UseKestrel(options =>
|
58 | 62 | {
|
@@ -123,7 +127,11 @@ void ConfigureListen(KestrelServerOptions serverOptions, IConfigurationRoot conf
|
123 | 127 |
|
124 | 128 | var app = builder.Build();
|
125 | 129 |
|
126 |
| -app.UseHostFiltering(); |
| 130 | +if (enableHostHeaderValidation) |
| 131 | +{ |
| 132 | + Console.WriteLine("Enabled host header filtering middleware."); |
| 133 | + app.UseHostFiltering(); |
| 134 | +} |
127 | 135 |
|
128 | 136 | bool AllowAnyCertificateValidationWithLogging(X509Certificate2 certificate, X509Chain? chain, SslPolicyErrors errors)
|
129 | 137 | {
|
|
0 commit comments