C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 访问频率限制功能实现、防止黑客扫描、防止恶意刷屏
2015-09-29 09:17 通用C#系统架构 阅读(4936) 评论(3) 编辑 收藏 举报很多软件组件,大家都能想到了,大家也能做出来,但是成熟稳定、可靠、易用、功能全面,可信任,可相信,可开源就不是很容易,需要树立良好的口碑才可以。
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; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
2009-09-29 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(十五)ASP.NET分页控件
2009-09-29 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(十三)代码生成器