Skip to content

Commit 8795915

Browse files
committed
feat: add KnownIPNetworks
1 parent 51dba56 commit 8795915

File tree

3 files changed

+26
-8
lines changed

3 files changed

+26
-8
lines changed

src/Middleware/HttpOverrides/src/ForwardedHeadersMiddleware.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,9 @@ public void ApplyForwarders(HttpContext context)
213213
// Host and Scheme initial values are never inspected, no need to set them here.
214214
};
215215

216-
var checkKnownIps = _options.KnownNetworks.Count > 0 || _options.KnownProxies.Count > 0;
216+
#pragma warning disable CS0618 // Type or member is obsolete
217+
var checkKnownIps = _options.KnownIPNetworks.Count > 0 || _options.KnownNetworks.Count > 0 || _options.KnownProxies.Count > 0;
218+
#pragma warning restore CS0618 // Type or member is obsolete
217219
bool applyChanges = false;
218220
int entriesConsumed = 0;
219221

@@ -399,13 +401,22 @@ private bool CheckKnownAddress(IPAddress address)
399401
{
400402
return true;
401403
}
404+
foreach (var network in _options.KnownIPNetworks)
405+
{
406+
if (network.Contains(address))
407+
{
408+
return true;
409+
}
410+
}
411+
#pragma warning disable CS0618 // Type or member is obsolete
402412
foreach (var network in _options.KnownNetworks)
403413
{
404414
if (network.Contains(address))
405415
{
406416
return true;
407417
}
408418
}
419+
#pragma warning restore CS0618 // Type or member is obsolete
409420
return false;
410421
}
411422

src/Middleware/HttpOverrides/src/ForwardedHeadersOptions.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using Microsoft.AspNetCore.HttpOverrides;
5+
using AspNetIPNetwork = Microsoft.AspNetCore.HttpOverrides.IPNetwork;
56
using IPAddress = System.Net.IPAddress;
67
using IPNetwork = System.Net.IPNetwork;
78

@@ -84,7 +85,13 @@ public class ForwardedHeadersOptions
8485
/// <summary>
8586
/// Address ranges of known proxies to accept forwarded headers from.
8687
/// </summary>
87-
public IList<IPNetwork> KnownNetworks { get; } = new List<IPNetwork>() { new IPNetwork(IPAddress.Loopback, 8) };
88+
[Obsolete("Please use KnownIPNetworks instead")]
89+
public IList<AspNetIPNetwork> KnownNetworks { get; } = new List<AspNetIPNetwork>() { new AspNetIPNetwork(IPAddress.Loopback, 8) };
90+
91+
/// <summary>
92+
/// Address ranges of known proxies to accept forwarded headers from.
93+
/// </summary>
94+
public IList<IPNetwork> KnownIPNetworks { get; } = new List<IPNetwork>() { new IPNetwork(IPAddress.Loopback, 8) };
8895

8996
/// <summary>
9097
/// The allowed values from x-forwarded-host. If the list is empty then all hosts are allowed.

src/Middleware/HttpOverrides/test/ForwardedHeadersMiddlewareTest.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public async Task XForwardedForForwardLimit(int limit, string header, string exp
120120
ForwardLimit = limit,
121121
};
122122
options.KnownProxies.Clear();
123-
options.KnownNetworks.Clear();
123+
options.KnownIPNetworks.Clear();
124124
app.UseForwardedHeaders(options);
125125
});
126126
}).Build();
@@ -861,7 +861,7 @@ public async Task XForwardedProtoOverrideLimitedByLoopback(string protoHeader, s
861861
};
862862
if (!loopback)
863863
{
864-
options.KnownNetworks.Clear();
864+
options.KnownIPNetworks.Clear();
865865
options.KnownProxies.Clear();
866866
}
867867
app.UseForwardedHeaders(options);
@@ -888,7 +888,7 @@ public void AllForwardsDisabledByDefault()
888888
var options = new ForwardedHeadersOptions();
889889
Assert.True(options.ForwardedHeaders == ForwardedHeaders.None);
890890
Assert.Equal(1, options.ForwardLimit);
891-
Assert.Single(options.KnownNetworks);
891+
Assert.Single(options.KnownIPNetworks);
892892
Assert.Single(options.KnownProxies);
893893
}
894894

@@ -1092,7 +1092,7 @@ public async Task XForwardForIPv4ToIPv6Mapping(string forHeader, string knownPro
10921092
var knownNetworkParts = knownNetwork.Split('/');
10931093
var networkIp = IPAddress.Parse(knownNetworkParts[0]);
10941094
var prefixLength = int.Parse(knownNetworkParts[1], CultureInfo.InvariantCulture);
1095-
options.KnownNetworks.Add(new System.Net.IPNetwork(networkIp, prefixLength));
1095+
options.KnownIPNetworks.Add(new System.Net.IPNetwork(networkIp, prefixLength));
10961096
}
10971097

10981098
using var host = new HostBuilder()
@@ -1134,7 +1134,7 @@ public async Task ForwardersWithDIOptionsRunsOnce(int limit, string header, stri
11341134
{
11351135
options.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
11361136
options.KnownProxies.Clear();
1137-
options.KnownNetworks.Clear();
1137+
options.KnownIPNetworks.Clear();
11381138
options.ForwardLimit = limit;
11391139
});
11401140
})
@@ -1176,7 +1176,7 @@ public async Task ForwardersWithDirectOptionsRunsTwice(int limit, string header,
11761176
ForwardLimit = limit,
11771177
};
11781178
options.KnownProxies.Clear();
1179-
options.KnownNetworks.Clear();
1179+
options.KnownIPNetworks.Clear();
11801180
app.UseForwardedHeaders(options);
11811181
app.UseForwardedHeaders(options);
11821182
});

0 commit comments

Comments
 (0)