Skip to content

Commit 0371d87

Browse files
authored
Obsolete Microsoft.AspNetCore.HttpOverrides.IPNetwork (#62490)
1 parent ee805dc commit 0371d87

File tree

7 files changed

+45
-4
lines changed

7 files changed

+45
-4
lines changed

src/DefaultBuilder/src/ForwardedHeadersOptionsSetup.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ public void Configure(ForwardedHeadersOptions options)
2727
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
2828
// Only loopback proxies are allowed by default. Clear that restriction because forwarders are
2929
// being enabled by explicit configuration.
30+
#pragma warning disable ASPDEPR005 // KnownNetworks is obsolete
3031
options.KnownNetworks.Clear();
32+
#pragma warning restore ASPDEPR005 // KnownNetworks is obsolete
33+
options.KnownIPNetworks.Clear();
3134
options.KnownProxies.Clear();
3235
}
3336
}

src/Middleware/HttpOverrides/src/ForwardedHeadersMiddleware.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,11 @@ 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+
var checkKnownIps = _options.KnownIPNetworks.Count > 0
217+
#pragma warning disable ASPDEPR005 // KnownNetworks is obsolete
218+
|| _options.KnownNetworks.Count > 0
219+
#pragma warning restore ASPDEPR005 // KnownNetworks is obsolete
220+
|| _options.KnownProxies.Count > 0;
217221
bool applyChanges = false;
218222
int entriesConsumed = 0;
219223

@@ -399,13 +403,22 @@ private bool CheckKnownAddress(IPAddress address)
399403
{
400404
return true;
401405
}
406+
foreach (var network in _options.KnownIPNetworks)
407+
{
408+
if (network.Contains(address))
409+
{
410+
return true;
411+
}
412+
}
413+
#pragma warning disable ASPDEPR005 // KnownNetworks is obsolete
402414
foreach (var network in _options.KnownNetworks)
403415
{
404416
if (network.Contains(address))
405417
{
406418
return true;
407419
}
408420
}
421+
#pragma warning restore ASPDEPR005 // KnownNetworks is obsolete
409422
return false;
410423
}
411424

src/Middleware/HttpOverrides/src/ForwardedHeadersOptions.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
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;
7+
using IPNetwork = System.Net.IPNetwork;
68

79
namespace Microsoft.AspNetCore.Builder;
810

@@ -82,8 +84,15 @@ public class ForwardedHeadersOptions
8284

8385
/// <summary>
8486
/// Address ranges of known proxies to accept forwarded headers from.
87+
/// Obsolete, please use <see cref="KnownIPNetworks"/> instead
8588
/// </summary>
86-
public IList<IPNetwork> KnownNetworks { get; } = new List<IPNetwork>() { new IPNetwork(IPAddress.Loopback, 8) };
89+
[Obsolete("Please use KnownIPNetworks instead. For more information, visit https://aka.ms/aspnet/deprecate/005.", DiagnosticId = "ASPDEPR005")]
90+
public IList<AspNetIPNetwork> KnownNetworks { get; } = new List<AspNetIPNetwork>() { new(IPAddress.Loopback, 8) };
91+
92+
/// <summary>
93+
/// Address ranges of known proxies to accept forwarded headers from.
94+
/// </summary>
95+
public IList<IPNetwork> KnownIPNetworks { get; } = new List<IPNetwork>() { new(IPAddress.Loopback, 8) };
8796

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

src/Middleware/HttpOverrides/src/IPNetwork.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ namespace Microsoft.AspNetCore.HttpOverrides;
99

1010
/// <summary>
1111
/// A representation of an IP network based on CIDR notation.
12+
/// Please use <see cref="System.Net.IPNetwork"/> instead
1213
/// </summary>
14+
[Obsolete("Please use System.Net.IPNetwork instead. For more information, visit https://aka.ms/aspnet/deprecate/005.", DiagnosticId = "ASPDEPR005")]
1315
public class IPNetwork
1416
{
1517
/// <summary>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
#nullable enable
2+
Microsoft.AspNetCore.Builder.ForwardedHeadersOptions.KnownIPNetworks.get -> System.Collections.Generic.IList<System.Net.IPNetwork>!

src/Middleware/HttpOverrides/test/ForwardedHeadersMiddlewareTest.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,10 @@ public async Task XForwardedForForwardLimit(int limit, string header, string exp
120120
ForwardLimit = limit,
121121
};
122122
options.KnownProxies.Clear();
123+
#pragma warning disable ASPDEPR005 // KnownNetworks is obsolete
123124
options.KnownNetworks.Clear();
125+
#pragma warning restore ASPDEPR005 // KnownNetworks is obsolete
126+
options.KnownIPNetworks.Clear();
124127
app.UseForwardedHeaders(options);
125128
});
126129
}).Build();
@@ -861,7 +864,10 @@ public async Task XForwardedProtoOverrideLimitedByLoopback(string protoHeader, s
861864
};
862865
if (!loopback)
863866
{
867+
#pragma warning disable ASPDEPR005 // KnownNetworks is obsolete
864868
options.KnownNetworks.Clear();
869+
#pragma warning restore ASPDEPR005 // KnownNetworks is obsolete
870+
options.KnownIPNetworks.Clear();
865871
options.KnownProxies.Clear();
866872
}
867873
app.UseForwardedHeaders(options);
@@ -888,7 +894,7 @@ public void AllForwardsDisabledByDefault()
888894
var options = new ForwardedHeadersOptions();
889895
Assert.True(options.ForwardedHeaders == ForwardedHeaders.None);
890896
Assert.Equal(1, options.ForwardLimit);
891-
Assert.Single(options.KnownNetworks);
897+
Assert.Single(options.KnownIPNetworks);
892898
Assert.Single(options.KnownProxies);
893899
}
894900

@@ -1092,7 +1098,7 @@ public async Task XForwardForIPv4ToIPv6Mapping(string forHeader, string knownPro
10921098
var knownNetworkParts = knownNetwork.Split('/');
10931099
var networkIp = IPAddress.Parse(knownNetworkParts[0]);
10941100
var prefixLength = int.Parse(knownNetworkParts[1], CultureInfo.InvariantCulture);
1095-
options.KnownNetworks.Add(new IPNetwork(networkIp, prefixLength));
1101+
options.KnownIPNetworks.Add(new System.Net.IPNetwork(networkIp, prefixLength));
10961102
}
10971103

10981104
using var host = new HostBuilder()
@@ -1134,7 +1140,10 @@ public async Task ForwardersWithDIOptionsRunsOnce(int limit, string header, stri
11341140
{
11351141
options.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
11361142
options.KnownProxies.Clear();
1143+
#pragma warning disable ASPDEPR005 // KnownNetworks is obsolete
11371144
options.KnownNetworks.Clear();
1145+
#pragma warning restore ASPDEPR005 // KnownNetworks is obsolete
1146+
options.KnownIPNetworks.Clear();
11381147
options.ForwardLimit = limit;
11391148
});
11401149
})
@@ -1176,7 +1185,10 @@ public async Task ForwardersWithDirectOptionsRunsTwice(int limit, string header,
11761185
ForwardLimit = limit,
11771186
};
11781187
options.KnownProxies.Clear();
1188+
#pragma warning disable ASPDEPR005 // KnownNetworks is obsolete
11791189
options.KnownNetworks.Clear();
1190+
#pragma warning restore ASPDEPR005 // KnownNetworks is obsolete
1191+
options.KnownIPNetworks.Clear();
11801192
app.UseForwardedHeaders(options);
11811193
app.UseForwardedHeaders(options);
11821194
});

src/Middleware/HttpOverrides/test/IPNetworkTest.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Microsoft.AspNetCore.HttpOverrides;
66

7+
[Obsolete("Microsoft.AspNetCore.HttpOverrides.IPNetwork is obsolete. For more information, visit https://aka.ms/aspnet/deprecate/005.", DiagnosticId = "ASPDEPR005")]
78
public class IPNetworkTest
89
{
910
[Theory]

0 commit comments

Comments
 (0)