黑客24小时在线接单的网站

黑客24小时在线接单的网站

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

引言

这篇展现了怎样在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 详细地址。 假如找不着远程 IP 详细地址,中间件将回到 HTTP 403 禁止访问。 针对 HTTP GET 请求,将绕过此认证全过程。

  • publicclassAdminSafeListMiddleware
  • {
  • privatereadonlyRequestDelegate_next;
  • privatereadonlyILogger<AdminSafeListMiddleware>_logger;
  • privatereadonlystring_safelist;
  • publicAdminSafeListMiddleware(
  • RequestDelegatenext,
  • ILogger<AdminSafeListMiddleware>logger,
  • stringsafelist)
  • {
  • _safelist=safelist;
  • _next=next;
  • _logger=logger;
  • }
  • publicasyncTaskInvoke(HttpContextcontext)
  • {
  • if(context.Request.Method!=HttpMethod.Get.Method)
  • {
  • varremoteIp=context.Connection.RemoteIpAddress;
  • _logger.LogDebug("RequestfromRemoteIPaddress:{RemoteIp}",remoteIp);
  • string[]ip=_safelist.Split(';');
  • varbytes=remoteIp.GetAddressBytes();
  • varbadIp=true;
  • foreach(varaddressinip)
  • {
  • vartestIp=IPAddress.Parse(address);
  • if(testIp.GetAddressBytes().SequenceEqual(bytes))
  • {
  • badIp=false;
  • break;
  • }
  • }
  • if(badIp)
  • {
  • _logger.LogWarning(
  • "ForbiddenRequestfromRemoteIPaddress:{RemoteIp}",remoteIp);
  • context.Response.StatusCode=StatusCodes.Status403Forbidden;
  • return;
  • }
  • }
  • await_next.Invoke(context);
  • }
  • }
  • 实际操作挑选器

    假如必须对于特殊 MVC 控制板或操作步骤的安全性安全密钥管理,请应用实际操作挑选器。 例如:。

  • publicclassClientIpCheckActionFilter:ActionFilterAttribute
  • {
  • privatereadonlyILogger_logger;
  • privatereadonlystring_safelist;
  • publicClientIpCheckActionFilter(stringsafelist,ILoggerlogger)
  • {
  • _safelist=safelist;
  • _logger=logger;
  • }
  • publicoverridevoidOnActionExecuting(ActionExecutingContextcontext)
  • {
  • varremoteIp=context.HttpContext.Connection.RemoteIpAddress;
  • _logger.LogDebug("RemoteIpAddress:{RemoteIp}",remoteIp);
  • varip=_safelist.Split(';');
  • varbadIp=true;
  • if(remoteIp.IsIPv4MappedToIPv6)
  • {
  • remoteIp=remoteIp.MapToIPv4();
  • }
  • foreach(varaddressinip)
  • {
  • vartestIp=IPAddress.Parse(address);
  • if(testIp.Equals(remoteIp))
  • {
  • badIp=false;
  • break;
  • }
  • }
  • if(badIp)
  • {
  • _logger.LogWarning("ForbiddenRequestfromIP:{RemoteIp}",remoteIp);
  • context.Result=newStatusCodeResult(StatusCodes.Status403Forbidden);
  • return;
  • }
  • base.OnActionExecuting(context);
  • }
  • }
  • 在中国 Startup.ConfigureServices ,将实际操作挑选器加上到 MVC 挑选器结合。 在下面的实例中, ClientIpCheckActionFilter 加上了一个实际操作挑选器。 安全性日志和控制面板监控软件案例做为结构函数参数开展传送。

  • services.AddScoped<ClientIpCheckActionFilter>(container=>
  • {
  • varloggerFactory=container.GetRequiredService<ILoggerFactory>();
  • varlogger=loggerFactory.CreateLogger<ClientIpCheckActionFilter>();
  • returnnewClientIpCheckActionFilter(
  • "127.0.0.1;192.168.1.5;::1",logger);
  • });
  • 随后,可以将实际操作挑选器运用到具备 [ServiceFilter] 特性的控制板或操作步骤:

  • [ServiceFilter(typeof(ClientIpCheckActionFilter))]
  • [HttpGet]
  • publicIEnumerable<string>Get()
  • 在实例运用中,实际操作挑选器将运用于智能控制器的 Get 操作步骤。 如果你根据推送来检测应用软件时:

    HTTP GET 要求,该 [ServiceFilter] 特性认证手机客户端 IP 详细地址。 假如容许浏览 Get 操作步骤,则 "实际操作挑选器" 和 "实际操作" 方式将转化成下列控制面板輸出的组合:

  • dbug:ClientIpSafelistComponents.Filters.ClientIpCheckActionFilter[0]
  • RemoteIpAddress:::1
  • dbug:ClientIpAspNetCore.Controllers.ValuesController[0]
  • successfulHTTPGET
  • 除 GET 以外的 HTTP 要求谓词演算将 AdminSafeListMiddleware 认证手机客户端 IP 详细地址。

    汇总

    该实例彻底可以更新改造成信用黑名单阻拦。

    • 评论列表:
    •  酒奴温人
       发布于 2022-06-12 20:29:32  回复该评论
    • equestfromIP:{RemoteIp}",remoteIp);context.Result=newStatusCodeResult(StatusCodes.Status403Forbidden);return;}base.OnActionExecuting(context);}}在中
    •  瑰颈莺时
       发布于 2022-06-12 17:02:36  回复该评论
    • ,remoteIp);varip=_safelist.Split(';');varbadIp=true;if(remoteIp.IsIPv4MappedToIPv6){remoteIp=remote
    •  辞眸雨安
       发布于 2022-06-12 17:12:20  回复该评论
    • ionExecutingContextcontext){varremoteIp=context.HttpContext.Connection.RemoteIpAddress;_logger.LogDebug("RemoteIpAddress:{RemoteIp}",remoteIp);varip=_
    •  掩吻杞胭
       发布于 2022-06-12 21:24:38  回复该评论
    • heckActionFilter("127.0.0.1;192.168.1.5;::1",logger);});随后,可以将实际操作挑选器运用到具备 [ServiceFilter]

    发表评论:

    Powered By

    Copyright Your WebSite.Some Rights Reserved.