• Cache 判断Ip几分钟内攻击次数


    要做一个防止一个Ip攻击网站的功能,想到了使用Cache,里面有Add  和  Insert方法。方法中有很多参数,他是以key-Value 方式存储,区别在于,Add方法一旦创建,里面的数据不可以修改。Inset 可以key不变修改 value参数。 

      设计思路是这样的,key为ip,value 为次数。代码如下:

     1  /// <summary>
     2         /// 获取当前应用程序指定CacheKey的Cache值
     3         /// </summary>
     4         /// <param name="CacheKey"></param>
     5         /// <returns></returns>
     6         public static object GetCache(string CacheKey)
     7         {
     8             System.Web.Caching.Cache objCache = HttpRuntime.Cache;
     9             return objCache[CacheKey];
    10         }
    11 
    12         /// <summary>
    13         /// 设置当前应用程序指定CacheKey的Cache值
    14         /// </summary>
    15         /// <param name="CacheKey"></param>
    16         /// <param name="objObject"></param>
    17         /// <param name="m">分钟</param>
    18         public static void SetCache(string CacheKey, object objObject, int m)
    19         {
    20             System.Web.Caching.Cache objCache = HttpRuntime.Cache;
    21             objCache.Insert(CacheKey, objObject, null, DateTime.Now.AddMinutes(m), Cache.NoSlidingExpiration);
    22         }
    23         /// <summary>
    24         /// 
    25         /// </summary>
    26         /// <param name="ip"></param>
    27         /// <param name="duration">时常(分钟)</param>
    28         /// <param name="count"> 访问量最大阀门值</param>
    29         /// <returns></returns>
    30         public static bool IpConfig(string ip, int duration = 1, int count = 10)
    31         {
    32             bool result = false;
    33             string urlIndex = "~/css/IpConfig.xml";
    34             string FileName = System.Web.HttpContext.Current.Server.MapPath(urlIndex);
    35             XDocument doc = XDocument.Load(FileName);
    36 
    37             var rel = from p in doc.Descendants("item") where p.Attribute("ip").Value.ToLower() == ip select p;
    38             result = (rel != null && rel.Count() > 0) ? true : false;
    39             if (!result)
    40             {
    41                 object obj = null;
    42                 if (string.IsNullOrWhiteSpace(ip)) { result = true; }
    43                 else
    44                 {
    45                     obj = GetCache(ip);
    46                     if (obj != null)
    47                     {
    48                         int _count = (int)obj;
    49                         if (_count >= count)
    50                         {
    51                             if (_count == count)
    52                             {
    53                                 insertIP(ip);
    54                                 sendmobile(ip);
    55                             }
    56                             return true;
    57                         }
    58                         else
    59                         {
    60                             System.Web.Caching.Cache objCache = HttpRuntime.Cache;
    61                             objCache.Insert(ip, _count + 1, null, DateTime.Now.AddSeconds(duration), Cache.NoSlidingExpiration);
    62                         }
    63                     }
    64                     else
    65                     {
    66                         SetCache(ip, 1, duration);
    67                     }
    68                 }
    69             }
    70             return result;
    71         }
    72 
    73       
    74         #region 将IP插入到XML中
    75         public static void insertIP(string ip)
    76         {
    77             string urlIndex = "~/css/IpConfig.xml";
    78             string FileName = System.Web.HttpContext.Current.Server.MapPath(urlIndex);
    79             XmlDocument xmlDoc = new XmlDocument();
    80             xmlDoc.Load(FileName);
    81             XmlNode root = xmlDoc.SelectSingleNode("root");
    82             XmlNode root0 = root.ChildNodes.Item(0);
    83             XmlElement xe1 = xmlDoc.CreateElement("item");
    84             xe1.SetAttribute("ip", ip);
    85 
    86             root0.AppendChild(xe1);
    87             xmlDoc.Save(FileName);
    88         }
    89         #endregion
    90 
    91        
  • 相关阅读:
    ASP.NET学习5 后台控制前台执行js的方法
    uml笔记
    Python拓展——import导入包之random随机数和turtle海龟作图(2)
    Python拓展——import导入包之random随机数和turtle海龟作图(1)
    蓝桥杯考完了
    Python第一单元测试(答案)
    Python第一单元测试
    Python第五课——嵌套for循环和if语句初步(2)
    Python第五课——嵌套for循环和if语句初步(1)
    Python第四课——import导入包和for循环(2)
  • 原文地址:https://www.cnblogs.com/tong775131501/p/5477137.html
Copyright © 2020-2023  润新知