前言

本篇展示了如何在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 请求,将跳过此验证过程。

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 地址。

总结

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

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

  1. Asp.Net Core 中如何设置 IP 白名单

    咨询区 MartinM: 我想在一个web站点中实现ip白名单功能,在 MVC 时代我只需要在 web.config 中添加如下配置即可. <security><ipSecurity ...

  2. 如何为ASP.NET Core设置客户端IP白名单验证

    本篇博文中展示了如何在ASP.NET Core应用程序中设置IP白名单验证的3种方式. 你可以使用一下3种方式: 使用中间件检查每个请求的远程IP地址 使用Action过滤器为指定的Controlle ...

  3. 在ASP.NET Core中获取客户端IP地址

    随着ASP.NET的发展,有不同的方式从请求中访问客户端IP地址.WebForms和MVC Web应用程序只是访问当前HTTP上下文的请求. var ip = HttpContext.Current. ...

  4. 如何在 ASP.NET CORE 中获取客户端 IP ?

    咨询区 eadam: 在 ASP.NET 中我可以用 Request.ServerVariables["REMOTE_ADDR"] 来获取客户端IP地址,请问在 ASP.NET C ...

  5. Java实现 对ip白名单的限制

    有些项目的接口是需要权限访问,比如限制IP.做权限控制,等等方案,本文是限制ip权限设置访问策略. 先看测试效果: 测试: 注意访问需要输入:http://127.0.0.1:8981/ 在配置文件加 ...

  6. 解决微信公众平台IP白名单

    微信公众平台,作为自媒体的旗舰级产品,越来越多的人已经投入它的怀抱.正如它的广告词所说:再小的个体,也有品牌 好吧,闲话不多说,今天要说的是它的IP白名单机制. 我们现在安装的大部分都是电信的家庭宽带 ...

  7. 阿里云ecs实例怎么增添到IP白名单和安全组?

    现在使用一些网络产品都会因为各种原因需要添加它们的 IP 到服务器白名单中,比如 360 网站卫士就需要将它们的 IP 段添加到我们的阿里云服务器的防火墙白名单中,要不然很有可能会被拦截从而出现 50 ...

  8. Eginx配置(SSL,令牌登录认证,IP白名单,代理转发)

    一般需要对接银行的接口,都需要用前置机,在前置机上安装银行的客户端(CBS).我们接口调用的实际是前置机上的http服务. 为了数据安全,一般会把前置机的网络和服务器的网络处理成同一个内网,防止数据被 ...

  9. HttpServletRequest、ServerHttpRequest获取访问者真实IP,并设置ip白名单

    在项目记录日志的时候和网关处理IP白名单的时候,通常会获取用户IP,一般都会从HttpServletRequest.ServerHttpRequest获取访问者真实IP 1.从HttpServletR ...

最新文章

  1. (传送门)android studio 一直卡在Gradle:Build Running的解决办法
  2. WEB-INF目录下登录表单提交的重定向
  3. MySQL 数据库sql语句用关键字作为where条件进行筛选实例演示,mysql建表、查询字段为关键字解决方法
  4. Linux下通过rm -f删除大量文件时提示-bash: /bin/rm: Argument list too long的解决方法...
  5. Vysor_v1.6.9
  6. 2.2 《数据库系统概论》之关系操作、关系完整性、关系代数
  7. 剑指 Offer 43. 1~n 整数中 1 出现的次数(可能是最简洁易懂的)
  8. sonar plugin DefaultMeasure与DefaultHighlighting
  9. winmail计算机三级,2016年计算机三级网络技术机考模拟题(1)
  10. Python爬虫-- Scrapy框架
  11. (241)IC验证工程师技能树
  12. Greenplum分区
  13. 根据Uri获取文件的绝对路径
  14. 微软集成开发者工具到 Visual Studio 中,Web 工具迎来“大换血”?
  15. 李沐动手学深度学习V2-RNN循环神经网络从零实现
  16. 解读文献(五)------基于阻抗控制
  17. 阿里高层大调整:“接班人”蒋凡被调离核心业务淘宝天猫!
  18. EM算法为什么可视为F函数的极大-极大算法?
  19. 【大疆mavic2】斗鱼直播
  20. linux 接收中文数据乱码,linux中文乱码问题的解决方法

热门文章

  1. (10) 需求征集 -- 权限管理
  2. nc65右键生成菜单_DbSchema生成表单和报表,原来如此简单
  3. html调用接口_搜狗ocr识别接口
  4. python实现二叉树和它的七种遍历
  5. boost asio resolver
  6. Linux下画原理图和PCB
  7. javascript闭包—围观大神如何解释闭包
  8. POJ 3267 The Cow Lexicon
  9. C专家编程复习摘要一
  10. twitter api使用_使用P2创建自己的Twitter风格的组博客