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 请求,将跳过此验证过程。

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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win2003中apache2整合tomcat5和iis6

为了能在已经存在iis6的服务器上运行自己的java程序&#xff0c;经过历时半年的尝试&#xff0c;今天终于搞定了&#xff0c;好开心啊。最开始是用iis直接连接tomcat&#xff0c;找遍了网上所有的资料&#xff0c;可是死活也连不通&#xff0c;或许是iis的封闭吧&#xff0c;看…

WiFi密码都不会破译​还想考清华?​

1 18万的飞机票也能秒空&#xff1f;&#xff1f;&#xff1f;留学生&#xff1a;这是救命钱啊▼2 WiFi密码都不会破译还想考清华&#xff1f;▼3 好羡慕有这样的妈妈▼4 猫&#xff1a;你别进来&#xff0c;我这儿不接待小孩儿&#xff01;孩子&#xff1a;我就进去看看▼…

ASP.NET网页文本编辑器的使用

ASP.NET网页文本编辑器的使用&#xff0c;效果图如下&#xff1a; 这里要用到DotNetTextBox.dll组件&#xff0c;具体内容可以在http://sites.google.com/site/zhangqs008/chang-yong-gong-ju 下载&#xff0c;使用方法如下&#xff1a; 1.将“DotNetTextBox.dll”文件添加到工…

在google play开放平台上closed texting如何删除_“爷青回”!如何抢先体验《英雄联盟》手游?这份攻略送给你...

如果你要问我最近什么手游最火&#xff1f;那我的回答肯定就是《英雄联盟》手游了&#xff01;自从拳头公司在前几天爆出部分地区公测的消息之后&#xff0c;很多国内玩家就已经按耐不住自己激动的心了。由于国服没有公测&#xff0c;所以许多国内玩家便纷纷涌入日服和韩服。这…

如何用 Linq 进行多重 Orderby ?

咨询区 Sasha&#xff1a;我有两张表&#xff1a;movies 和 categories&#xff0c;我想获取一个先按 categoryid 再按 Name 排序的list。movie 表有三个列&#xff1a;ID,Name,CategoryID。category 表有两个列&#xff1a;ID,Name。我设想的伪代码如下&#xff1a;var movies…

php 电压 异常,tv断线警告是什么原因

电力系统中TV断线&#xff0c;就是电压互感器断线。TV断线一般可以分为TV 一次侧(高压)断线和二次侧(低压)断线&#xff0c;无论是哪一侧的断线&#xff0c;都将会使TV二次回路的电压异常&#xff0c;影响继电保护装置的正确动作。 (推荐学习&#xff1a;phpstorm)如果发生TV一…

《JavaScript 高级程序设计》 7.1 正则表达式支持

转载于:https://www.cnblogs.com/xiaochaohuashengmi/archive/2010/11/07/1871100.html

豆瓣9.7,这些舍不得看完的神剧,看一集少一集啊!

全世界只有3.14 % 的人关注了爆炸吧知识今天给大家介绍一位好朋友——菌菌。菌菌&#xff0c;作为资深美剧迷英语博主&#xff0c;收藏了很多经典美剧、动画资源&#xff0c;每天还会和大家分享新鲜有趣的英语知识。喜欢看美剧追动画和立志学好英语的小伙伴千万别错过&#xff…

因子分析最少要有几个因子_Re0:魔女司教和魔女是什么关系?他们的魔女因子是魔女给的吗...

​魔女司教和魔女的能力一点关系都没有&#xff0c;而且魔女教一开始是正常的&#xff0c;直到艾米莉亚父母死后才出现各种大罪司教发疯&#xff0c;怠惰是艾米莉雅的养父&#xff0c;艾米莉亚一族守护的封印被虚饰魔女入侵&#xff0c;怠惰为了守护强行融合了魔女基因&#xf…

一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第三十集

林晓黎在暗中观察股市行情&#xff0c;设计告发云氏集团暗中控股。证券会派人调查云氏集团&#xff0c;慕容家的股票甚至直接停盘。而完成了这次报复的林晓黎心中却并没有复仇的快感&#xff0c;他觉得空虚、歉疚&#xff0c;没有脸再去见云朵。 在全家精神濒临崩溃的关口&…

徒手打造基于Spark的数据工厂(Data Factory):从设计到实现

在大数据处理和人工智能时代&#xff0c;数据工厂&#xff08;Data Factory&#xff09;无疑是一个非常重要的大数据处理平台。市面上也有成熟的相关产品&#xff0c;比如Azure Data Factory&#xff0c;不仅功能强大&#xff0c;而且依托微软的云计算平台Azure&#xff0c;为大…

非类型模板参数

对于函数模板与类模板&#xff0c;模板参数并不局限于类型&#xff0c;普通值也可以作为模板参数。在基于类型参数的模板中&#xff0c;你定义了一些具体的细节来加以确定代码&#xff0c;直到代码被调用时这些细节才被真正的确定。但是在这里&#xff0c;我们面对的是这些细节…

深度学习框架PyTorch与TensorFlow,谁更胜一筹?

全世界只有3.14 % 的人关注了爆炸吧知识自从2012年深度学习再一次声名鹊起以来&#xff0c;许多机器学习框架都争先恐后地要成为研究人员和行业从业者的新宠。面对如些众多的选择&#xff0c;人们很难判断最流行的框架到底是什么。在某些情况下&#xff0c;深度学习或深度迁移学…

PHP如何防采集方法代码

1 <?php 2 /**3 * FileName:test.php4 * Summary: 防采集5 * Author: sinob6 * CreateTime: 2005-10-18 7 * LastModifed:2005-10-18 8 * 请参见http://mall.yi85.com/9 */10 $HTTP_REFERER$_SERVER["HTTP_REFERER"];11 $HTTP_USER_AGENT$_SERVER["HTTP_USE…

Windows Server 2008 R2 之二十一远程桌面服务RD之二

一、远程桌面授权 远程桌面授权&#xff08;RD 授权&#xff09;以前称为终端服务授权&#xff08;TS 授权&#xff09;&#xff0c;它能够管理每个设备或用户与远程桌面会话主机&#xff08;RD 会话主机&#xff09;服务器连接所需的远程桌面服务客户端访问许可 (RDS CAL)。使…

件工程项目开发最全文档模板_一文带你了解微信小程序社区和小程序开发

微信小程序越来越受欢迎&#xff0c;很多小白也想制作自己的小程序。小白若想自己顺利制作&#xff0c;有两种方法&#xff1a;一种是下载安装微信官方开发者工具&#xff0c;然后写代码开发&#xff1b;一种是使用第三方小程序制作工具&#xff0c;选个现成的小程序模板&#…

php 单例模式的类,用单例模式来设计一个PHP数据库类

class nmdb{private $link;static private $_instance;// 连接数据库private function __construct($host, $username, $password){$this->link mysql_connect($host, $username, $password);$this->query("SET NAMES utf8", $this->link);//echo mysql_er…

Windows 11 预览版 Build 22000.168 发布

微软现已发布第八个 Windows 11 预览版更新 KB5005191&#xff0c;版本号升级至 Build 22000.168。本次更新面向 Beta 频道和 Dev 频道的 Windows 预览体验成员推出&#xff0c;Windows 11 Insider Preview Build 22000.168 主要变化如下。1.微软宣布 Microsoft Teams 现已支持…

如何扩展开发团队(转)

原文标题&#xff1a;How To Scale a Development Team 原文链接&#xff1a;http://adam.heroku.com/past/2011/4/28/scaling_a_development_team/ 作者通过自己在Heroku的经验&#xff0c;讨论了开发团队是如何从家庭式作坊发展到专业化团队的过程&#xff0c;在每个阶段中都…

sqlserver全文索引问题

把噪声词定义文件清空就成了&#xff0c;FTData\noiseCHS.txt机制不是很明白&#xff0c;不过在清噪声词定义后&#xff0c;确实是连标点符号都能全文搜索了。 数据存储编码有问题&#xff0c;用nvarchar转载于:https://www.cnblogs.com/freedom831215/archive/2010/11/09/1872…