Asp.Net Core安全防护-客户端IP白名单限制

IT科技2025-11-05 02:06:139

前言

本篇展示了如何在ASP.NET Core应用程序中设置IP白名单验证的安全2种方式。

你可以使用以下2种方式:

用于检查每个请求的防护远程 IP 地址的中间件。 MVC 操作筛选器,客户用于检查针对特定控制器或操作方法的名单请求的远程 IP 地址。

中间件

Startup.Configure方法将自定义 AdminSafeListMiddleware 中间件类型添加到应用的限制请求管道。 使用 .NET Core 配置提供程序检索到该安全,安全并将其作为构造函数参数进行传递。防护

app.UseMiddleware<AdminSafeListMiddleware>("127.0.0.1;192.168.1.5;::1"); 

中间件将字符串分析为数组,客户并在数组中搜索远程 IP 地址。b2b信息网名单 如果找不到远程 IP 地址,限制中间件将返回 HTTP 403 禁止访问。安全 对于 HTTP GET 请求,防护将跳过此验证过程。客户

public class AdminSafeListMiddleware {     private readonly RequestDelegate _next;     private readonly ILogger<AdminSafeListMiddleware> _logger;     private readonly string _safelist;     public AdminSafeListMiddleware(         RequestDelegate next,名单         ILogger<AdminSafeListMiddleware> logger,         string safelist)     {         _safelist = safelist;         _next = next;         _logger = logger;     }     public async Task Invoke(HttpContext context)     {         if (context.Request.Method != HttpMethod.Get.Method)         {             var remoteIp = context.Connection.RemoteIpAddress;             _logger.LogDebug("Request from Remote IP address: {RemoteIp}", remoteIp);             string[] ip = _safelist.Split(;);             var bytes = remoteIp.GetAddressBytes();             var badIp = true;             foreach (var address in ip)             {                 var testIp = IPAddress.Parse(address);                 if (testIp.GetAddressBytes().SequenceEqual(bytes))                 {                     badIp = false;                     break;                 }             }             if (badIp)             {                 _logger.LogWarning(                     "Forbidden Request from Remote IP address: {RemoteIp}", remoteIp);                 context.Response.StatusCode = StatusCodes.Status403Forbidden;                 return;             }         }         await _next.Invoke(context);     } } 

操作筛选器

如果需要针对特定 MVC 控制器或操作方法的安全安全访问控制,请使用操作筛选器。限制 例如:。

public class ClientIpCheckActionFilter : ActionFilterAttribute {     private readonly ILogger _logger;     private readonly string _safelist;     public ClientIpCheckActionFilter(string safelist, ILogger logger)     {         _safelist = safelist;         _logger = logger;     }     public override void OnActionExecuting(ActionExecutingContext context)     {         var remoteIp = context.HttpContext.Connection.RemoteIpAddress;         _logger.LogDebug("Remote IpAddress: {RemoteIp}", remoteIp);         var ip = _safelist.Split(;);         var badIp = true;         if (remoteIp.IsIPv4MappedToIPv6)         {             remoteIp = remoteIp.MapToIPv4();         }         foreach (var address in ip)         {             var testIp = IPAddress.Parse(address);             if (testIp.Equals(remoteIp))             {                 badIp = false;                 break;             }         }         if (badIp)         {             _logger.LogWarning("Forbidden Request from IP: {RemoteIp}", remoteIp);             context.Result = new StatusCodeResult(StatusCodes.Status403Forbidden);             return;         }         base.OnActionExecuting(context);     } } 

在中 Startup.ConfigureServices ,将操作筛选器添加到 MVC 筛选器集合。 在下面的示例中, ClientIpCheckActionFilter 添加了一个操作筛选器。 安全日志和控制台记录器实例作为构造函数参数进行传递。亿华云计算

services.AddScoped<ClientIpCheckActionFilter>(container => {     var loggerFactory = container.GetRequiredService<ILoggerFactory>();     var logger = loggerFactory.CreateLogger<ClientIpCheckActionFilter>();     return new ClientIpCheckActionFilter(         "127.0.0.1;192.168.1.5;::1", logger); }); 

然后,可以将操作筛选器应用到具有 [ServiceFilter] 属性的控制器或操作方法:

[ServiceFilter(typeof(ClientIpCheckActionFilter))] [HttpGet] public IEnumerable<string> Get() 

在示例应用中,操作筛选器将应用于控制器的 Get 操作方法。 当你通过发送来测试应用程序时:

HTTP GET 请求,该 [ServiceFilter] 属性验证客户端 IP 地址。 如果允许访问 Get 操作方法,则 "操作筛选器" 和 "操作" 方法将生成以下控制台输出的变体:

dbug: ClientIpSafelistComponents.Filters.ClientIpCheckActionFilter[0]       Remote IpAddress: ::1 dbug: ClientIpAspNetCore.Controllers.ValuesController[0]       successful HTTP GET 

除 GET 之外的 HTTP 请求谓词将 AdminSafeListMiddleware 验证客户端 IP 地址。

总结

该案例完全可以改造成黑名单拦截。

本文地址:http://www.bzve.cn/html/32a65499313.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

AOCI2779VH(探索无边界体验,颠覆传统视觉感受)

为什么说Volatile+Interrupt是停止线程优雅的姿势?

2月编程语言排行榜已出,你看出这点了吗?

Java8中的Stream那么彪悍,你知道它的原理是什么吗?

电脑远程连接出现证书错误的解决方法(如何处理电脑远程连接中的证书错误问题)

美团提出基于隐式条件位置编码,性能优于ViT和DeiT

别找了,这可能是全网最全的鸿蒙(OpenHarmony)刷机指南

一行 JavaScript 代码搞定这些操作!收藏了

友情链接

滇ICP备2023006006号-39