日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發布時間:2023/12/4 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 地址。

總結

該案例完全可以改造成黑名單攔截。

總結

以上是生活随笔為你收集整理的Asp.Net Core安全防护-客户端IP白名单限制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。