咨询区

  • MartinM

我想在一个web站点中实现ip白名单功能,在 MVC 时代我只需要在 web.config 中添加如下配置即可。


<security><ipSecurity allowUnlisted="false" denyAction="NotFound"><add allowed="true" ipAddress="XX.XX.XX.XX" subnetMask="255.255.255.0"/></ipSecurity>
</security>

但在 AspNetCore 中使用如上配置时,程序启动就会报错。


Unable to start process The web server request failed with status code 500, internal server error

很显然这个 config 配置是有问题的,请问是否有内置或者第三方的组件来实现这个功能?

回答区

  • Ergwun

Damian Bod 写了一篇文章:https://damienbod.com/2016/12/18/implementing-a-client-white-list-using-asp-net-core-middleware/ 来演示如果通过中间件的方式来实现 ip 白名单功能。

他分别给了一个 全局性中间件actionfilter 两种方式来实现,无论哪种方式都需要在 appsetttings.json 中配置可允许访问的 ip 列表,然后根据这个list来检查客户端的ip是否符合?client ip 可以通过 context.Connection.RemoteIpAddress 来获取。

如果你有更精细化的配置,比如说设置ip段,那你可以通过nuget上的 IPAddressRange 包来实现,它支持了多种格式,如:192.168.0.0/24192.168.0.0/255.255.255.0,包括 CIDR 表达式和 IPv6。

参考下面的例子。

  1. appsettings.json:


{"IPAddressWhitelistConfiguration": {"AuthorizedIPAddresses": ["::1", // IPv6 localhost"127.0.0.1", // IPv4 localhost"192.168.0.0/16", // Local network"10.0.0.0/16", // Local network]}
}
  1. IPWhiteListConfiguration.cs:


namespace My.Web.Configuration
{using System.Collections.Generic;public class IPWhitelistConfiguration : IIPWhitelistConfiguration{public IEnumerable<string> AuthorizedIPAddresses { get; set; }}
}
  1. IIPWhiteListConfiguration.cs:


namespace My.Web.Configuration
{using System.Collections.Generic;public interface IIPWhitelistConfiguration{IEnumerable<string> AuthorizedIPAddresses { get; }}
}
  1. Startup.cs:


public class Startup
{// ...public void ConfigureServices(IServiceCollection services){// ...services.Configure<IPWhitelistConfiguration>(this.Configuration.GetSection("IPAddressWhitelistConfiguration"));services.AddSingleton<IIPWhitelistConfiguration>(resolver => resolver.GetRequiredService<IOptions<IPWhitelistConfiguration>>().Value);// ...}}
  1. ClientIPAddressFilterAttribute.cs:


namespace My.Web.Filters
{using System.Collections.Generic;using System.Linq;using System.Net;using Microsoft.AspNetCore.Mvc;using Microsoft.AspNetCore.Mvc.Filters;using NetTools;using My.Web.Configuration;public class ClientIPAddressFilterAttribute : ActionFilterAttribute{private readonly IEnumerable<IPAddressRange> authorizedRanges;public ClientIPAddressFilterAttribute(IIPWhitelistConfiguration configuration){this.authorizedRanges = configuration.AuthorizedIPAddresses.Select(item => IPAddressRange.Parse(item));}public override void OnActionExecuting(ActionExecutingContext context){var clientIPAddress = context.HttpContext.Connection.RemoteIpAddress;if (!this.authorizedRanges.Any(range => range.Contains(clientIPAddress))){context.Result = new UnauthorizedResult();}}}
}

点评区

在 website 中设置ip白名单的功能非常常见,nuget上也有很多的开源中间件帮助实现,比如:ClientIpAspNetCoreIIS,我在项目中也有用到白名单的功能,只不过是做到了 nginx 层。

Asp.Net Core 中如何设置 IP 白名单相关推荐

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

    前言 本篇展示了如何在ASP.NET Core应用程序中设置IP白名单验证的2种方式. 你可以使用以下2种方式: 用于检查每个请求的远程 IP 地址的中间件. MVC 操作筛选器,用于检查针对特定控制 ...

  2. 在Win10系统中防火墙如何设置IP白名单

    在Win10系统中防火墙如何设置IP白名单 开发中遇到什么学习什么: 现在就需要别人的电脑,在一个公司一个内网,让内网的同事可以访问我电脑程序 我没找到添加单个内网ip的方法,这个是全部内网的 控制面 ...

  3. 【Java】Socket网络编程实现内网穿透、端口映射转发、内网穿透上网工具的编写,设置IP白名单防火墙

    这里写目录标题 简介 更新 一.背景 1.1 情景假设 1.2 想要达到的目的 1.3 局限 1.3 解决方案一(路由器NAT) 1.4 解决方案二(云服务器转发) 二.方案介绍 2.1 方案简介 2 ...

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

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

  5. shiro设置ip白名单_Data Lake Analytics IP白名单设置攻略

    当我们成功开通了 DLA 服务之后,第一个最想要做的事情就是登录 DLA 数据库.而登录数据库就需要一个连接串.下面这个页面是我们首次开通 DLA 之后的界面,在这里我们要创建一个服务访问点. 在上面 ...

  6. 微信小程序入门7-微信公众号设置IP白名单

    一.为什么要配置IP白名单 此处IP为服务器对公网IP: 在IP白名单内的IP地址作为来源,获取access_token接口才可调用成功. 而想要调用公众号相关API,就必须获取access_toke ...

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

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

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

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

  9. shiro设置ip白名单_亚马逊家庭IP:Luminati的搭建的步骤

    1.下载 luminati proxy manaer 2.双击运行lpm 3.浏览器中输入http://127.0.0.1:22999,表明lpm安装成功.要注意打开后弹出的如下窗口不能关闭,必须一直 ...

最新文章

  1. 内核知识第九讲,32位下的分页管理,36位下的分页管理.以及64位下的分页管理
  2. 娃哈哈困境:做好了生意,没做好品牌
  3. C语言源代码展示:常用转换函数实现原理
  4. bind-html自动换行,如何实现textarea placeholder自动换行?
  5. 壁纸控的你需要看这里!
  6. 4g对讲机写码工具_极蜂智能网络对讲机 4G联网通话零距离
  7. 写一个函数,输入一个十六进制,输出相应的十进制数。
  8. 周边pd是什么意思_pd是什么意思 饭圈pd是什么意思
  9. JavaScript 基础知识总结(一)
  10. 我与“萝卜坑”的点点滴滴
  11. javaweb调用qq认证登录接口
  12. asp企业建站系统 最新推出的 免费下载
  13. 《SysML精粹》学习记录--第十一章
  14. 【企业】读纸牌屋,把握人性
  15. 美团配送和亚马逊AWS的异曲同工
  16. H+框架 通过按钮新增选项卡功能
  17. 2022年起重机司机(限桥式起重机)新版试题及起重机司机(限桥式起重机)作业考试题库
  18. MBA-day23 至多至少问题-练习题
  19. Freeswitch总结大全
  20. 权限管理系统(包括审批流程)数据库设计图

热门文章

  1. 简单调试 Bash 脚本
  2. 怎样编译libdb_比特币编译(Ubuntu 16.04)
  3. BZOJ4314 倍数?倍数!
  4. Keras 获取中间某一层输出
  5. 62、滑动窗口的最大值
  6. 在navicat中新建数据库
  7. IE6下z-index犯癫不起作用bug的初步研究
  8. 如何在Windows 7或Vista上安装IIS
  9. autocopy2u_借助AutoCopy简化Firefox中的文本复制和粘贴
  10. 如何在Android TV上自定义推荐行