Asp.Net Core 中如何设置 IP 白名单
咨询区
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/24
和 192.168.0.0/255.255.255.0
,包括 CIDR
表达式和 IPv6。
参考下面的例子。
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]}
}
IPWhiteListConfiguration.cs:
namespace My.Web.Configuration
{using System.Collections.Generic;public class IPWhitelistConfiguration : IIPWhitelistConfiguration{public IEnumerable<string> AuthorizedIPAddresses { get; set; }}
}
IIPWhiteListConfiguration.cs:
namespace My.Web.Configuration
{using System.Collections.Generic;public interface IIPWhitelistConfiguration{IEnumerable<string> AuthorizedIPAddresses { get; }}
}
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);// ...}}
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 白名单相关推荐
- Asp.Net Core安全防护-客户端IP白名单限制
前言 本篇展示了如何在ASP.NET Core应用程序中设置IP白名单验证的2种方式. 你可以使用以下2种方式: 用于检查每个请求的远程 IP 地址的中间件. MVC 操作筛选器,用于检查针对特定控制 ...
- 在Win10系统中防火墙如何设置IP白名单
在Win10系统中防火墙如何设置IP白名单 开发中遇到什么学习什么: 现在就需要别人的电脑,在一个公司一个内网,让内网的同事可以访问我电脑程序 我没找到添加单个内网ip的方法,这个是全部内网的 控制面 ...
- 【Java】Socket网络编程实现内网穿透、端口映射转发、内网穿透上网工具的编写,设置IP白名单防火墙
这里写目录标题 简介 更新 一.背景 1.1 情景假设 1.2 想要达到的目的 1.3 局限 1.3 解决方案一(路由器NAT) 1.4 解决方案二(云服务器转发) 二.方案介绍 2.1 方案简介 2 ...
- 如何在 ASP.NET CORE 中获取客户端 IP ?
咨询区 eadam: 在 ASP.NET 中我可以用 Request.ServerVariables["REMOTE_ADDR"] 来获取客户端IP地址,请问在 ASP.NET C ...
- shiro设置ip白名单_Data Lake Analytics IP白名单设置攻略
当我们成功开通了 DLA 服务之后,第一个最想要做的事情就是登录 DLA 数据库.而登录数据库就需要一个连接串.下面这个页面是我们首次开通 DLA 之后的界面,在这里我们要创建一个服务访问点. 在上面 ...
- 微信小程序入门7-微信公众号设置IP白名单
一.为什么要配置IP白名单 此处IP为服务器对公网IP: 在IP白名单内的IP地址作为来源,获取access_token接口才可调用成功. 而想要调用公众号相关API,就必须获取access_toke ...
- HttpServletRequest、ServerHttpRequest获取访问者真实IP,并设置ip白名单
在项目记录日志的时候和网关处理IP白名单的时候,通常会获取用户IP,一般都会从HttpServletRequest.ServerHttpRequest获取访问者真实IP 1.从HttpServletR ...
- 在ASP.NET Core中获取客户端IP地址
随着ASP.NET的发展,有不同的方式从请求中访问客户端IP地址.WebForms和MVC Web应用程序只是访问当前HTTP上下文的请求. var ip = HttpContext.Current. ...
- shiro设置ip白名单_亚马逊家庭IP:Luminati的搭建的步骤
1.下载 luminati proxy manaer 2.双击运行lpm 3.浏览器中输入http://127.0.0.1:22999,表明lpm安装成功.要注意打开后弹出的如下窗口不能关闭,必须一直 ...
最新文章
- 内核知识第九讲,32位下的分页管理,36位下的分页管理.以及64位下的分页管理
- 娃哈哈困境:做好了生意,没做好品牌
- C语言源代码展示:常用转换函数实现原理
- bind-html自动换行,如何实现textarea placeholder自动换行?
- 壁纸控的你需要看这里!
- 4g对讲机写码工具_极蜂智能网络对讲机 4G联网通话零距离
- 写一个函数,输入一个十六进制,输出相应的十进制数。
- 周边pd是什么意思_pd是什么意思 饭圈pd是什么意思
- JavaScript 基础知识总结(一)
- 我与“萝卜坑”的点点滴滴
- javaweb调用qq认证登录接口
- asp企业建站系统 最新推出的 免费下载
- 《SysML精粹》学习记录--第十一章
- 【企业】读纸牌屋,把握人性
- 美团配送和亚马逊AWS的异曲同工
- H+框架 通过按钮新增选项卡功能
- 2022年起重机司机(限桥式起重机)新版试题及起重机司机(限桥式起重机)作业考试题库
- MBA-day23 至多至少问题-练习题
- Freeswitch总结大全
- 权限管理系统(包括审批流程)数据库设计图