网站总体规划设计说明南京十大广告公司
网站总体规划设计说明,南京十大广告公司,网站建设搜索,网页版微信二维码怎么弄前言本篇展示了如何在ASP.NET Core应用程序中设置IP白名单验证的2种方式。你可以使用以下2种方式#xff1a;用于检查每个请求的远程 IP 地址的中间件。MVC 操作筛选器#xff0c;用于检查针对特定控制器或操作方法的请求的远程 IP 地址。中间件Startup.Configure方法将自定义… 前言本篇展示了如何在ASP.NET Core应用程序中设置IP白名单验证的2种方式。你可以使用以下2种方式用于检查每个请求的远程 IP 地址的中间件。MVC 操作筛选器用于检查针对特定控制器或操作方法的请求的远程 IP 地址。中间件Startup.Configure方法将自定义 AdminSafeListMiddleware 中间件类型添加到应用的请求管道。 使用 .NET Core 配置提供程序检索到该安全并将其作为构造函数参数进行传递。app.UseMiddlewareAdminSafeListMiddleware(127.0.0.1;192.168.1.5;::1);
中间件将字符串分析为数组并在数组中搜索远程 IP 地址。 如果找不到远程 IP 地址中间件将返回 HTTP 403 禁止访问。 对于 HTTP GET 请求将跳过此验证过程。public class AdminSafeListMiddleware
{private readonly RequestDelegate _next;private readonly ILoggerAdminSafeListMiddleware _logger;private readonly string _safelist;public AdminSafeListMiddleware(RequestDelegate next,ILoggerAdminSafeListMiddleware 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.AddScopedClientIpCheckActionFilter(container
{var loggerFactory container.GetRequiredServiceILoggerFactory();var logger loggerFactory.CreateLoggerClientIpCheckActionFilter();return new ClientIpCheckActionFilter(127.0.0.1;192.168.1.5;::1, logger);
});
然后可以将操作筛选器应用到具有 [ServiceFilter] 属性的控制器或操作方法[ServiceFilter(typeof(ClientIpCheckActionFilter))]
[HttpGet]
public IEnumerablestring 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.mzph.cn/diannao/92602.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!