Soenneker.Utils.HttpClientCache.Ssrf
4.0.1
Prefix Reserved
See the version list below for details.
dotnet add package Soenneker.Utils.HttpClientCache.Ssrf --version 4.0.1
NuGet\Install-Package Soenneker.Utils.HttpClientCache.Ssrf -Version 4.0.1
<PackageReference Include="Soenneker.Utils.HttpClientCache.Ssrf" Version="4.0.1" />
<PackageVersion Include="Soenneker.Utils.HttpClientCache.Ssrf" Version="4.0.1" />
<PackageReference Include="Soenneker.Utils.HttpClientCache.Ssrf" />
paket add Soenneker.Utils.HttpClientCache.Ssrf --version 4.0.1
#r "nuget: Soenneker.Utils.HttpClientCache.Ssrf, 4.0.1"
#:package Soenneker.Utils.HttpClientCache.Ssrf@4.0.1
#addin nuget:?package=Soenneker.Utils.HttpClientCache.Ssrf&version=4.0.1
#tool nuget:?package=Soenneker.Utils.HttpClientCache.Ssrf&version=4.0.1
Soenneker.Utils.HttpClientCache.Ssrf
SSRF-safe, DNS-rebinding-resistant HttpClient caching.
Installation
dotnet add package Soenneker.Utils.HttpClientCache.Ssrf
Registration
using Soenneker.Utils.HttpClientCache.Ssrf.Registrars;
services.AddSsrfHttpClientCacheAsSingleton();
AddSsrfHttpClientCacheAsScoped() is also available. Both methods register the underlying
Soenneker.Utils.HttpClientCache service with the matching lifetime when it has not already
been registered.
Usage
using Soenneker.Utils.HttpClientCache.Ssrf.Abstract;
public sealed class RemoteDocumentClient
{
private readonly ISsrfHttpClientCache _clientCache;
public RemoteDocumentClient(ISsrfHttpClientCache clientCache)
{
_clientCache = clientCache;
}
public async ValueTask<string> Download(Uri uri, CancellationToken cancellationToken)
{
HttpClient client = await _clientCache.Get("remote-documents", cancellationToken);
return await client.GetStringAsync(uri, cancellationToken);
}
}
The cache implements the same API as IHttpClientCache, including synchronous and asynchronous
option factories, cache removal, and disposal.
Security behavior
- DNS is resolved when a connection is opened.
- Every resolved address must be publicly routable.
- The socket connects directly to the validated address set, preventing a second DNS lookup from changing the destination.
- Redirect destinations pass through the same connection validation.
- Loopback, private, link-local, carrier-grade NAT, documentation, benchmark, multicast, and reserved address ranges are blocked for IPv4 and IPv6.
- Proxies, custom
HttpClientHandlerinstances, and customSslOptionsare rejected because they expand or bypass the cache's controlled transport configuration.
The caller owns neither the returned HttpClient nor its handler. Use Remove/RemoveSync when a
cached client is no longer needed, or dispose the cache with its dependency-injection scope.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.10)
- Soenneker.Atomics.ValueBools (>= 4.0.33)
- Soenneker.Dictionaries.SingletonKeys (>= 4.0.105)
- Soenneker.Utils.HttpClientCache (>= 4.0.1998)
- Soenneker.Validators.IpAddresses.Ssrf (>= 4.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.