博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 访问频率限制功能实现、防止黑客扫描、防止恶意刷屏...
阅读量:6893 次
发布时间:2019-06-27

本文共 3124 字,大约阅读时间需要 10 分钟。

很多软件组件,大家都能想到了,大家也能做出来,但是成熟稳定、可靠、易用、功能全面,可信任,可相信,可开源就不是很容易,需要树立良好的口碑才可以。

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{    ///     /// 调用频率限制独立的库。    ///    /// 修改纪录    ///    ///        2015-09-25 版本:1.0 JiRiGaLa 创建主键。    ///    /// 
///
JiRiGaLa
///
2015-09-25
///
///
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(); } /// /// 是否在指定的时间内,已经到了呼叫限制次数 /// 什么键名,什么键值,在多少时间内,限制调用几次 /// 2015-09-25 吉日嘎拉 /// /// 键名 /// 过期时间,多少时间里 /// 限制次数 ///
是否超过限制
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; } }}

 

转载地址:http://ykkdl.baihongyu.com/

你可能感兴趣的文章
基于Redis构建10万+终端级的高性能部标JT808协议的Gps网关服务器(转)
查看>>
把搜狗输入法词库导入Google拼音输入法
查看>>
利用反射将IDataReader读取到实体类中效率低下的解决办法
查看>>
用ndp部署storm应用
查看>>
【Java】监控远程服务器JVM
查看>>
JVM系列第12讲:JVM参数之查看JVM参数
查看>>
Spring中加载xml配置文件的六种方式
查看>>
android Fragments详解二:创建Fragment
查看>>
知道创宇 - 中文版putty后门事件分析
查看>>
电子政务信息交换平台与数据中心的构建(转)
查看>>
妄撮小游戏的开发思想-Android开发资料-《妄撮(撕开美女衣服)》游戏源代码外传...
查看>>
用ethtool确定多网卡Linux服务器网口位置
查看>>
Perl分割字符串的一个精妙的写法
查看>>
零点祝福
查看>>
上下文属性监听
查看>>
【小白的CFD之旅】10 敲门实例
查看>>
POI文件导出至EXCEL,并弹出下载框
查看>>
iOS 使用正则表达式库RegexKitLite的问题
查看>>
C#使用MemoryStream类读写内存
查看>>
MySQL内存使用-线程独享
查看>>