日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Asp.NetCore安全防護-客戶端IP白名單限制

前言

本篇展示了如何在ASP.NET Core應用程序中設置IP白名單驗證的2種方式。

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

  • 用于檢查每個請求的遠程 IP 地址的中間件。
  • MVC 操作篩選器,用于檢查針對特定控制器或操作方法的請求的遠程 IP 地址。

中間件

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

 
 
  1. app.UseMiddleware("127.0.0.1;192.168.1.5;::1"); 

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

 
 
  1. public class AdminSafeListMiddleware 
  2.     private readonly RequestDelegate _next; 
  3.     private readonly ILogger _logger; 
  4.     private readonly string _safelist; 
  5.  
  6.     public AdminSafeListMiddleware( 
  7.         RequestDelegate next, 
  8.         ILogger 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.     } 

操作篩選器

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

 
 
  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 添加了一個操作篩選器。 安全日志和控制臺記錄器實例作為構造函數(shù)參數(shù)進行傳遞。

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

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

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

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

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

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

除 GET 之外的 HTTP 請求謂詞將 AdminSafeListMiddleware 驗證客戶端 IP 地址。

總結

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


網(wǎng)頁名稱:Asp.NetCore安全防護-客戶端IP白名單限制
標題URL:http://www.dlmjj.cn/article/cdjsiog.html