自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Asp.Net Core安全防護(hù)-客戶端IP白名單限制

安全 數(shù)據(jù)安全 后端
Startup.Configure方法將自定義 AdminSafeListMiddleware 中間件類型添加到應(yīng)用的請(qǐng)求管道。 使用 .NET Core 配置提供程序檢索到該安全,并將其作為構(gòu)造函數(shù)參數(shù)進(jìn)行傳遞。

[[420037]]

前言

本篇展示了如何在ASP.NET Core應(yīng)用程序中設(shè)置IP白名單驗(yàn)證的2種方式。

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

  • 用于檢查每個(gè)請(qǐng)求的遠(yuǎn)程 IP 地址的中間件。
  • MVC 操作篩選器,用于檢查針對(duì)特定控制器或操作方法的請(qǐng)求的遠(yuǎn)程 IP 地址。

中間件

Startup.Configure方法將自定義 AdminSafeListMiddleware 中間件類型添加到應(yīng)用的請(qǐng)求管道。 使用 .NET Core 配置提供程序檢索到該安全,并將其作為構(gòu)造函數(shù)參數(shù)進(jìn)行傳遞。

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

中間件將字符串分析為數(shù)組,并在數(shù)組中搜索遠(yuǎn)程 IP 地址。 如果找不到遠(yuǎn)程 IP 地址,中間件將返回 HTTP 403 禁止訪問。 對(duì)于 HTTP GET 請(qǐng)求,將跳過此驗(yàn)證過程。

  1. public class AdminSafeListMiddleware 
  2.     private readonly RequestDelegate _next; 
  3.     private readonly ILogger<AdminSafeListMiddleware> _logger; 
  4.     private readonly string _safelist; 
  5.  
  6.     public AdminSafeListMiddleware( 
  7.         RequestDelegate next
  8.         ILogger<AdminSafeListMiddleware> logger, 
  9.         string safelist) 
  10.     { 
  11.         _safelist = safelist; 
  12.         _next = next
  13.         _logger = logger; 
  14.     } 
  15.  
  16.     public async Task Invoke(HttpContext context) 
  17.     { 
  18.         if (context.Request.Method != HttpMethod.Get.Method) 
  19.         { 
  20.             var remoteIp = context.Connection.RemoteIpAddress; 
  21.             _logger.LogDebug("Request from Remote IP address: {RemoteIp}", remoteIp); 
  22.  
  23.             string[] ip = _safelist.Split(';'); 
  24.  
  25.             var bytes = remoteIp.GetAddressBytes(); 
  26.             var badIp = true
  27.             foreach (var address in ip) 
  28.             { 
  29.                 var testIp = IPAddress.Parse(address); 
  30.                 if (testIp.GetAddressBytes().SequenceEqual(bytes)) 
  31.                 { 
  32.                     badIp = false
  33.                     break; 
  34.                 } 
  35.             } 
  36.  
  37.             if (badIp) 
  38.             { 
  39.                 _logger.LogWarning( 
  40.                     "Forbidden Request from Remote IP address: {RemoteIp}", remoteIp); 
  41.                 context.Response.StatusCode = StatusCodes.Status403Forbidden; 
  42.                 return
  43.             } 
  44.         } 
  45.  
  46.         await _next.Invoke(context); 
  47.     } 

操作篩選器

如果需要針對(duì)特定 MVC 控制器或操作方法的安全安全訪問控制,請(qǐng)使用操作篩選器。 例如:。

  1. public class ClientIpCheckActionFilter : ActionFilterAttribute 
  2.     private readonly ILogger _logger; 
  3.     private readonly string _safelist; 
  4.  
  5.     public ClientIpCheckActionFilter(string safelist, ILogger logger) 
  6.     { 
  7.         _safelist = safelist; 
  8.         _logger = logger; 
  9.     } 
  10.  
  11.     public override void OnActionExecuting(ActionExecutingContext context) 
  12.     { 
  13.         var remoteIp = context.HttpContext.Connection.RemoteIpAddress; 
  14.         _logger.LogDebug("Remote IpAddress: {RemoteIp}", remoteIp); 
  15.         var ip = _safelist.Split(';'); 
  16.         var badIp = true
  17.  
  18.         if (remoteIp.IsIPv4MappedToIPv6) 
  19.         { 
  20.             remoteIp = remoteIp.MapToIPv4(); 
  21.         } 
  22.  
  23.         foreach (var address in ip) 
  24.         { 
  25.             var testIp = IPAddress.Parse(address); 
  26.  
  27.             if (testIp.Equals(remoteIp)) 
  28.             { 
  29.                 badIp = false
  30.                 break; 
  31.             } 
  32.         } 
  33.  
  34.         if (badIp) 
  35.         { 
  36.             _logger.LogWarning("Forbidden Request from IP: {RemoteIp}", remoteIp); 
  37.             context.Result = new StatusCodeResult(StatusCodes.Status403Forbidden); 
  38.             return
  39.         } 
  40.  
  41.         base.OnActionExecuting(context); 
  42.     } 

在中 Startup.ConfigureServices ,將操作篩選器添加到 MVC 篩選器集合。 在下面的示例中, ClientIpCheckActionFilter 添加了一個(gè)操作篩選器。 安全日志和控制臺(tái)記錄器實(shí)例作為構(gòu)造函數(shù)參數(shù)進(jìn)行傳遞。

  1. services.AddScoped<ClientIpCheckActionFilter>(container => 
  2.     var loggerFactory = container.GetRequiredService<ILoggerFactory>(); 
  3.     var logger = loggerFactory.CreateLogger<ClientIpCheckActionFilter>(); 
  4.  
  5.     return new ClientIpCheckActionFilter( 
  6.         "127.0.0.1;192.168.1.5;::1", logger); 
  7. }); 

然后,可以將操作篩選器應(yīng)用到具有 [ServiceFilter] 屬性的控制器或操作方法:

  1. [ServiceFilter(typeof(ClientIpCheckActionFilter))] 
  2. [HttpGet] 
  3. public IEnumerable<string> Get() 

在示例應(yīng)用中,操作篩選器將應(yīng)用于控制器的 Get 操作方法。 當(dāng)你通過發(fā)送來測試應(yīng)用程序時(shí):

HTTP GET 請(qǐng)求,該 [ServiceFilter] 屬性驗(yàn)證客戶端 IP 地址。 如果允許訪問 Get 操作方法,則 "操作篩選器" 和 "操作" 方法將生成以下控制臺(tái)輸出的變體:

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

除 GET 之外的 HTTP 請(qǐng)求謂詞將 AdminSafeListMiddleware 驗(yàn)證客戶端 IP 地址。

總結(jié)

 

該案例完全可以改造成黑名單攔截。

 

責(zé)任編輯:武曉燕 來源: UP技術(shù)控
相關(guān)推薦

2009-08-18 15:43:56

ASP.NET生成客戶端腳本

2009-07-24 17:31:56

ASP.NET AJA

2025-01-15 09:10:20

2011-01-21 17:53:44

Zimbra

2012-02-09 09:40:37

虛擬化虛擬桌面VDI

2010-01-05 17:30:23

.NET Framew

2013-09-16 09:57:52

2009-08-07 13:56:46

ASP.NET控件開發(fā)

2011-06-07 15:11:14

2024-06-11 09:00:00

異步編程代碼

2024-09-09 07:37:51

AspJWT權(quán)限

2018-08-20 08:03:46

跨平臺(tái) Web操作系統(tǒng)

2009-07-29 13:04:59

2025-01-13 09:10:00

白名單IPCIDR

2025-01-15 00:01:00

開發(fā)應(yīng)用界面

2014-05-12 09:08:19

2021-03-12 00:04:52

網(wǎng)關(guān)Api

2024-09-10 08:13:16

Asp項(xiàng)目輕量級(jí)

2021-02-19 06:54:33

配置系統(tǒng)ASP.NET Cor

2024-12-05 08:14:41

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)