asp.netcore安全防护-客户端ip白名单限制(代码片段)

dotNET跨平台 dotNET跨平台     2022-12-27     183

关键词:

前言

本篇展示了如何在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 地址。

总结

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

“阿里云”ecs服务器怎么设置ip白名单?

“阿里云”ECS服务器IP白名单设置操作步骤如下:1、登录云盾安全管控平台管理控制台;您也可以在登录阿里云控制台后,将鼠标移至右上角的账户图标打开用户菜单,并单击安全管控,进入云盾安全管控平台管理控制台。2、... 查看详情

在express,node.js中使用req.ip将IP地址列入白名单是不是安全?

】在express,node.js中使用req.ip将IP地址列入白名单是不是安全?【英文标题】:IsitsafetowhitelistanIPaddressusingreq.ipinexpress,node.js?在express,node.js中使用req.ip将IP地址列入白名单是否安全?【发布时间】:2021-06-2800:32:48【问题描述】:... 查看详情

从 ADF 连接到 Snowflake 的白名单 IP 范围

...【发布时间】:2022-01-1413:09:11【问题描述】:我们有一个客户端,它在Snowflake中有数据,但也限制了与数据仓库的IP连接。如果我们要使用默认的Azure数据工厂雪花连接器,我们必须将哪些IP提供给客户端以加入白名单?它是数据... 查看详情

如何在春季安全中IP白名单/oauth/check_token端点

】如何在春季安全中IP白名单/oauth/check_token端点【英文标题】:howtoIPwhitelist/oauth/check_tokenendpointinspringsecurity【发布时间】:2018-09-0705:56:43【问题描述】:我有两个应用程序(战争),一个充当ResourceServer,另一个是我的AuthServer,... 查看详情

WAF 后面的 EKS 的 IP 白名单

...入白名单。我想阻止除WAF之外的所有流量。我的设置是:客户端>>WAF>>AWSLB(网络LB)>>EKS>>入口控制器( 查看详情

asp.netcore基于滑动窗口算法实现限流控制

...#xff0c;需要对接口的可访问频次进行限流控制,避免因客户端频繁请求导致服务器压力过大。而AspNetCoreRateLimit[1]是目前ASP.NETCore下最常用的限流解决方案。查看它的实现代码,我发现它使用的固定窗口算法。var entry = ... 查看详情

如何将 AWS RDS 安全组中的 Zapier IP 地址列入白名单

】如何将AWSRDS安全组中的ZapierIP地址列入白名单【英文标题】:HowtowhitelistZapierIPaddressesinAWSRDSsecuritygroup【发布时间】:2020-02-0202:15:00【问题描述】:我继承了一个AWSRDS实例,这是我第一次尝试在数据世界中管理这方面的事情,如... 查看详情

设置ssh登录ip白名单,过滤非法ip密码登录请求

...地址的ssh登录请求会被驳回。一定要再三确认自己使用的客户端计算机的公网IP地址,重启sshd服务后,除了在白名单上的IP,来自其余IP的密码登录均会被屏蔽。 查看详情

Spring Security WebFlux IP 白名单

】SpringSecurityWebFluxIP白名单【英文标题】:SpringSecurityWebFluxIPWhitelist【发布时间】:2020-04-1317:36:57【问题描述】:在利用WebFlux的最新SpringSecurity中,安全配置如下所示,SecurityWebFilterChainspringSecurityFilterChain(ServerHttpSecurityhttp)http.auth... 查看详情

两种白名单限流方案(redislua限流,guava方案)(代码片段)

两种白名单限流方案1、redislua方案创建注解类@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceLimit//资源名称,用于描述接口功能Stringname()default"";//资源keyStringkey()default&# 查看详情

如何将 AWS Beanstalk IP 列入白名单

】如何将AWSBeanstalkIP列入白名单【英文标题】:HowtoWhitelistAWSBeanstalkIP【发布时间】:2020-03-3111:45:35【问题描述】:我的实用程序部署在AWSbeanstalk上,并将一些数据推送到我们客户的一个数据库服务器中。客户希望将beanstalk实例的... 查看详情

深信服防火墙mac白名单

...全和文件安全检测安全策略,该模块不支持ECN协议,导致客户端超时重传。经过在客户端主机上查询,用netshinttcpshowglobal命令查询是否开启ecn,查询后确认ECN开起来。 查看详情

白名单是啥意思?

...用白名单,例如数据库服务器仅允许特定IP地址、网段的客户端来连接它。参考资料来源:百度百科-实时黑名单列表参考资料来源:百度百科-白名单参考技术A若是使用vivo手机,将软件加入加速白名单后,一键加速时不会终止正... 查看详情

asp.netcore获取客户端ip地址(代码片段)

1、在ConfigureServices注入IHttpContextAccessor//ASP.NETCore2.1的注入方式//services.AddHttpContextAccessor();//services.TryAddSingleton<IActionContextAccessor,ActionContextAccessor>();//注入services.AddSing 查看详情

asp.netcore获取客户端ip(代码片段)

publicasyncTask<IActionResult>WpfDoLogin(stringaccount,stringpassword) //获取访问者ip stringip=HttpContext.Connection.RemoteIpAddress.ToString(); varresult=awaitwpfUserBusiness.CheckWpfUser 查看详情

如何在asp.netcore中获取客户端ip?(代码片段)

...P.NET中我可以用Request.ServerVariables["REMOTE_ADDR"]来获取客户端IP地址,请问在ASP.NETCore中我该如何实现呢?回答区CodingYourLife如果你用的是.NET5,可以用内部提供的扩展方法来实现获取客户端IP,参考代码如下ÿ 查看详情

如何设置 API url,以便只有 IP 白名单客户端可以访问 API,而 Web 应用程序本身仍然可供所有人访问?

】如何设置APIurl,以便只有IP白名单客户端可以访问API,而Web应用程序本身仍然可供所有人访问?【英文标题】:HowcanIsetAPIurlsuchthattheAPIisaccessibleonlytoIPwhitelistedclientswhilethewebapplicationitselfremainsaccessibletoall?【发布时间】:2021-05-110... 查看详情

mysql配置白名单(代码片段)

1.测试是否允许远程连接 $telnet192.168.1.83306host192.168.1.4isnotallowedtoconnecttothismysqlserver2.允许特定客户端ip地址连接  $mysql-uroot-pEnterpassword:mysql>usemysqlmysql>GRANTALLON*.*to[email  查看详情