代码改变世界
[登录 · 注册]
  • C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 访问频率限制功能实现、防止黑客扫描、防止恶意刷屏
  • 很多软件组件,大家都能想到了,大家也能做出来,但是成熟稳定、可靠、易用、功能全面,可信任,可相信,可开源就不是很容易,需要树立良好的口碑才可以。

    1:往往会有黑客,进行撞库挖掘漏洞,很多系统的账户有可能被猜测出密码来,会存在严重的安全问题。

    2:全部加上图片验证码等,用户体验比较差,天天用的用户会很难受。

    3:恶意刷屏、大数据查询有恶意查询时,服务器进入恶性循环,数据库压力会过大,为了防止进入恶性循环,能控制调用频率比较好。

    4:对外,对内提供接口调用时,合作伙伴,内部接口调用频率过高时,服务器的压力会多大,网络流量也会过大,系统进入恶性循环。

    5:为了有良性的信息系统,有强大的组件支撑,可以保证整个生态系统的平稳运行。

    调用方法如下:

    bool result = false; result = DotNet.Business.PooledRedisHelper.CallLimit("ip, 手机,url", 50, 5);

    System.Console.WriteLine("result:" + result.ToString());

    限制调用次数的功能,做了一个通用的函数,若有需要欢迎大家使用。

    什么资源,多少分钟内,限制调用多少次。 全自动的,返回 true, 表示,已经到达了限制次数了, false 可以继续调用的意思。

    //-----------------------------------------------------------------
    // All Rights Reserved , Copyright (C) 2015 , Hairihan TECH, Ltd. 
    //-----------------------------------------------------------------
    
    using System;
    using System.Configuration;
    using ServiceStack.Redis;
    
    namespace DotNet.Business
    {
        /// <summary>
        /// 调用频率限制独立的库。
        ///
        /// 修改纪录
        ///
        ///        2015-09-25 版本:1.0 JiRiGaLa 创建主键。
        ///
        /// <author>
        ///        <name>JiRiGaLa</name>
        ///        <date>2015-09-25</date>
        /// </author>
        /// </summary>
        public sealed partial class PooledRedisHelper
        {
            // 数据库
            public static int InitialDbCallLimit = 78;
    
            private static PooledRedisClientManager instanceCallLimit = null;
    
            public static PooledRedisClientManager InstanceCallLimit
            {
                get
                {
                    if (instanceCallLimit == null)
                    {
                        if (ConfigurationManager.AppSettings["RedisHosts"] != null)
                        {
                            Url = ConfigurationManager.AppSettings["RedisHosts"];
                        }
                        if (string.IsNullOrEmpty(Url))
                        {
                            Url = "redis.ztosys.com:6379";
                        }
                        instanceCallLimit = new PooledRedisClientManager(InitialDbCallLimit, new string[] { Url });
                    }
                    return instanceCallLimit;
                }
            }
    
            public static IRedisClient GetCallLimitClient()
            {
                return InstanceCallLimit.GetClient();
            }
    
            /// <summary>
            /// 是否在指定的时间内,已经到了呼叫限制次数
            /// 什么键名,什么键值,在多少时间内,限制调用几次
            /// 2015-09-25 吉日嘎拉
            /// </summary>
            /// <param name="keyName">键名</param>
            /// <param name="minutes">过期时间,多少时间里</param>
            /// <param name="limit">限制次数</param>
            /// <returns>是否超过限制</returns>
            public static bool CallLimit(string keyName, int minutes, int limit)
            {
                return CallLimit(keyName, DateTime.Now.AddMinutes(minutes), limit);
            }
    
            public static bool CallLimit(string keyName, DateTime expireAt, int limit)
            {
                bool result = false;
    
                using (var redisClient = PooledRedisHelper.GetUserClient())
                {
                    if (redisClient.ContainsKey(keyName))
                    {
                        result = redisClient.IncrementValue(keyName) > limit;
                    }
                    else
                    {
                        redisClient.IncrementValue(keyName);
                        // 设置过期时间
                        redisClient.ExpireEntryAt(keyName, expireAt);
                    }
                }
    
                return result;
            }
        }
    }
  • 上一篇:C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 外部服务调用、内部服务调用优化,面向服务化的
    下一篇:C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 角色权限的配置页面改进优化
  • 【推广】 阿里云小站-上云优惠聚集地(新老客户同享)更有每天限时秒杀!
    【推广】 云服务器低至0.95折 1核2G ECS云服务器8.1元/月
    【推广】 阿里云老用户升级四重礼遇享6.5折限时折扣!
  • 原文:https://www.cnblogs.com/jirigala/p/4845481.html
走看看 - 开发者的网上家园