asp.net防类似DDOS攻击(CC攻击)代码
Web.config
<httpModules>
<!–Url重写–>
<add type=”UrlRewriter.RewriterHttpModule, UrlRewriter” name=”UrlRewriter”/>
<!–防类似DDOS攻击–>
<add type=”UrlRewriter.DDosAttackModule, UrlRewriter” name=”DDosAttackModule”/>
</httpModules>
using System;
using System.Web;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Timers;
namespace UrlRewriter
{
/// <summary>
/// 阻止攻击IP地址的回应
/// </summary>
public class DosAttackModule : IHttpModule
{
void IHttpModule.Dispose() { }
void IHttpModule.Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
private static Dictionary<string, short> _IpAdresses = new Dictionary<string, short>();
private static Stack<string> _Banned = new Stack<string>();
private static Timer _Timer = CreateTimer();
private static Timer _BannedTimer = CreateBanningTimer();
private const int BANNED_REQUESTS = 1; //规定时间内访问的最大次数
private const int REDUCTION_INTERVAL = 1000; // 1 秒(检查访问次数的时间段)
private const int RELEASE_INTERVAL = 5 * 60 * 1000; // 5 分钟(清除一个禁止IP的时间段)
private void context_BeginRequest(object sender, EventArgs e)
{
string ip = HttpContext.Current.Request.UserHostAddress;
if (_Banned.Contains(ip))
{
HttpContext.Current.Response.StatusCode = 403;
HttpContext.Current.Response.End();
}
CheckIpAddress(ip);
}
/// <summary>
/// 检查访问IP
/// </summary>
private static void CheckIpAddress(string ip)
{
if (!_IpAdresses.ContainsKey(ip)) //如果没有当前访问IP的记录就将访问次数设为1
{
_IpAdresses[ip] = 1;
}
else if (_IpAdresses[ip] == BANNED_REQUESTS) //如果当前IP访问次数等于规定时间段的最大访问次数就拉于“黑名单”
{
_Banned.Push(ip);
_IpAdresses.Remove(ip);
}
else //正常访问就加次数 1
{
_IpAdresses[ip]++;
}
}
#region Timers
/// <summary>
/// 创建计时器,从_IpAddress减去一个请求。
/// </summary>
private static Timer CreateTimer()
{
Timer timer = GetTimer(REDUCTION_INTERVAL);
timer.Elapsed += new ElapsedEventHandler(TimerElapsed);
return timer;
}
/// <summary>
/// 创建定时器,消除一个禁止的IP地址
/// </summary>
/// <returns></returns>
private static Timer CreateBanningTimer()
{
Timer timer = GetTimer(RELEASE_INTERVAL);
timer.Elapsed += delegate { _Banned.Pop(); }; //消除一个禁止IP
return timer;
}
/// <summary>
/// 创建一个时间器,并启动它
/// </summary>
/// <param name="interval">以毫秒为单位的时间间隔</param>
private static Timer GetTimer(int interval)
{
Timer timer = new Timer();
timer.Interval = interval;
timer.Start();
return timer;
}
/// <summary>
/// 减去从集合中的每个IP地址的请求
/// </summary>
private static void TimerElapsed(object sender, ElapsedEventArgs e)
{
foreach (string key in _IpAdresses.Keys)
{
_IpAdresses[key]--;
if (_IpAdresses[key] == 0)
_IpAdresses.Remove(key);
}
}
#endregion
}
}
分享到:
相关推荐
本压缩包包含的是一个完整的ASP.NET项目源代码集合,提供了十个不同的项目示例,这对于学习和理解ASP.NET的工作原理、开发流程以及最佳实践来说,是一个宝贵的资源。 1. **ASP.NET基础**:ASP.NET是.NET框架的一...
asp.net 代码生成器 【基本说明】 1、能够生成三层模式操作的所有后台代码,简单的SQL Server 2005数据库操作。 2、生成的代码包括了 MODEL、BLL、DAL、DBHelper、Config 生成的代码内有详细注释可提供参考。 ...
Asp.Net 公众号代码 .net微信公众号代码 微信公众号代码 Asp.Net 公众号代码 .net微信公众号代码 微信公众号代码 Asp.Net 公众号代码 .net微信公众号代码 微信公众号代码 Asp.Net 公众号代码 .net微信公众号代码 ...
asp.net 人事管理系统 源代码 asp.net 人事管理系统 源代码 asp.net 人事管理系统 源代码 asp.net 人事管理系统 源代码 asp.net 人事管理系统 源代码 asp.net 人事管理系统 源代码
asp.net源代码下载asp.net源代码下载asp.net源代码下载asp.net源代码下载asp.net源代码下载asp.net源代码下载asp.net源代码下载asp.net源代码下载asp.net源代码下载
C#本科毕业设计基于ASP.NET的人事管理系统源代码C#本科毕业设计基于ASP.NET的人事管理系统源代码C#本科毕业设计基于ASP.NET的人事管理系统源代码C#本科毕业设计基于ASP.NET的人事管理系统源代码。C#本科毕业设计基于...
【标题】"bbs论坛源代码 asp.net web开发"涉及的是使用ASP.NET技术构建一个BBS(Bulletin Board System,电子公告板)论坛网站的过程。ASP.NET是微软公司推出的一种Web应用程序框架,它构建在.NET Framework之上,为...
【标题】"基于ASP.NET的仿百度云盘源码"是一个针对网络存储服务的开发项目,旨在实现一个类似于百度云盘的功能。这个源码库主要使用ASP.NET技术,这是一种由微软开发的Web应用程序框架,用于构建高效、可扩展且功能...
【标题】:“asp.net 论坛源代码”指的是基于ASP.NET技术开发的论坛系统的源代码。...通过深入研究和学习这份asp.net论坛源代码,开发者可以掌握构建类似应用所需的技能,同时也能提升对ASP.NET框架的理解和运用。
- **ASP.NET(C Sharp)防SQL注入脚本2.0**:这可能是一个C#编写的脚本,用于检测和阻止SQL注入攻击。它可能包含了自定义的输入验证规则、异常处理机制,以及与数据库交互的安全接口。 **总结** 防止SQL注入是ASP...
Asp.NET是一个强大的Web应用程序开发框架,由微软公司推出,用于构建动态、数据驱动的Web应用。它构建在.NET Framework之上,...此外,了解Web安全最佳实践,如防止SQL注入和XSS攻击,也是Asp.NET开发者的重要技能。
【标题】"wiki开源代码asp.net+sql"所涉及的知识点涵盖了多个方面,主要集中在Web开发领域,包括了Wiki系统的基础构建、编程语言C#、Web应用框架ASP.NET以及数据库管理系统SQL Server。以下是对这些知识点的详细阐述...
本教学源代码集适用于初学者,旨在帮助理解ASP.NET的基本概念、语法和开发流程。 1. **ASP.NET基础** ASP.NET是.NET框架的一部分,允许开发者使用各种编程语言(如C#、VB.NET)编写Web应用程序。它引入了控件和...
在这个名为"ASP.NET源代码共享"的主题中,我们可以推测这是一个关于分享ASP.NET相关项目源代码的资源。尽管描述部分为空,但从标签"源码"和"工具"可以推断,这个压缩包可能包含了一个或多个实用的ASP.NET工具或示例...
根据提供的文件信息,本文将重点围绕“ASP.NET防注入讲解.pdf”的内容展开,解析其中涉及的关键知识点,并结合标题、描述及部分展示的内容进行详细的解读。 ### 标题:ASP.NET防注入讲解 #### 关键知识点解析: *...
ASP.NET宠物商店网页MyPetShop源代码是一个基于微软的ASP.NET技术开发的示例应用,它为学习和理解ASP.NET的Web应用程序开发提供了丰富的实践素材。这个项目包含了用户登录、商品展示、购物车管理和后台商品管理等多...
ASP.NET服务器控件与组件开发电子书及示例代码ASP.NET服务器控件与组件开发电子书及示例代码ASP.NET服务器控件与组件开发电子书及示例代码ASP.NET服务器控件与组件开发电子书及示例代码ASP.NET服务器控件与组件开发...
ASP.NET 是一种强大的 web 应用程序开发框架,然而,如同其他基于数据库的应用程序,它也可能面临 SQL 注入式攻击的威胁。SQL 注入是一种利用恶意 SQL 代码篡改正常查询,以获取未授权访问、数据泄露或破坏数据库的...
在本文中,我们将深入探讨如何在ASP.NET中防止SQL注入攻击,这是一个重要的安全问题,对任何处理数据库交互的应用来说都是至关重要的。 SQL注入是黑客利用不安全的代码向数据库发送恶意SQL语句,从而获取、修改、...
在ASP.NET MVC框架下,没有内置的TreeView控件,但开发者可以使用各种方法来实现类似的功能。一种常见的方式是自定义一个视图(View)和模型(Model),结合HTML辅助方法和JavaScript库(如jQuery UI的TreeView插件...