通过程序使你的网站具有预防DOS攻击的能力 --提高站点的安全性
2008-12-26 15:05
344 查看
如果不对客户端采取访问控制策略,一个网站很容易被DOS攻击。因此有必要采取措施。
例如运行以下代码:
for( int i = 0; i < 100000; i ++ )
{
WebClient client = new WebClient();
client.DownloadString("http://www.yourwebsite.com/default.aspx");
}几分钟后,如果你的站点出现无法显示,则说明站点已经被dos攻击了。
预防策略:在一定时间内,对某个ip的访问类型及次数进行限制。用缓存记录ip地址和请求类型及次数信息。
具体实现:
定义一个枚举类型,标识用户访问的类型。分为第一次访问;再次访问。第一次访问对网站的代价较高,再次访问则代价较低。
public static class ActionValidator
{
private const int DURATION = 10; // 10 min period
public enum ActionTypeEnum
{
FirstVisit = 100, // The most expensive one, choose the value wisely.
ReVisit = 1000, // Welcome to revisit as many times as user likes
}
}
创建一个静态方法用来检查请求是否违反了设定的策略。
public static bool IsValid(ActionTypeEnum actionType)
{
HttpContext context = HttpContext.Current;
if (context.Request.Browser.Crawler) return false;
string key = actionType.ToString() + context.Request.UserHostAddress;
var hit = (HitInfo)(context.Cache[key] ?? new HitInfo());
if (hit.Hits > (int)actionType) return false;
else hit.Hits++;
if (hit.Hits == 1)
context.Cache.Add(key, hit, null, DateTime.Now.AddMinutes(DURATION),
System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null);
return true;
}
在httphandler或httpmodule加入对请求的判断
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
// Check if revisit is valid or not
if (!base.IsPostBack)
{
// Block cookie less visit attempts
if (Profile.IsFirstVisit)
{
if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.FirstVisit)) Response.End();
}
else
{
if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.ReVisit)) Response.End();
}
}
else
{
// Limit number of postbacks
if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.Postback)) Response.End();
}
}
这样你的站点就能预防简单的DOS攻击了。
原文:Prevent Denial of Service (DOS) attacks in your web application
转自:云和山的彼端
例如运行以下代码:
for( int i = 0; i < 100000; i ++ )
{
WebClient client = new WebClient();
client.DownloadString("http://www.yourwebsite.com/default.aspx");
}几分钟后,如果你的站点出现无法显示,则说明站点已经被dos攻击了。
预防策略:在一定时间内,对某个ip的访问类型及次数进行限制。用缓存记录ip地址和请求类型及次数信息。
具体实现:
定义一个枚举类型,标识用户访问的类型。分为第一次访问;再次访问。第一次访问对网站的代价较高,再次访问则代价较低。
public static class ActionValidator
{
private const int DURATION = 10; // 10 min period
public enum ActionTypeEnum
{
FirstVisit = 100, // The most expensive one, choose the value wisely.
ReVisit = 1000, // Welcome to revisit as many times as user likes
}
}
创建一个静态方法用来检查请求是否违反了设定的策略。
public static bool IsValid(ActionTypeEnum actionType)
{
HttpContext context = HttpContext.Current;
if (context.Request.Browser.Crawler) return false;
string key = actionType.ToString() + context.Request.UserHostAddress;
var hit = (HitInfo)(context.Cache[key] ?? new HitInfo());
if (hit.Hits > (int)actionType) return false;
else hit.Hits++;
if (hit.Hits == 1)
context.Cache.Add(key, hit, null, DateTime.Now.AddMinutes(DURATION),
System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null);
return true;
}
在httphandler或httpmodule加入对请求的判断
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
// Check if revisit is valid or not
if (!base.IsPostBack)
{
// Block cookie less visit attempts
if (Profile.IsFirstVisit)
{
if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.FirstVisit)) Response.End();
}
else
{
if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.ReVisit)) Response.End();
}
}
else
{
// Limit number of postbacks
if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.Postback)) Response.End();
}
}
这样你的站点就能预防简单的DOS攻击了。
原文:Prevent Denial of Service (DOS) attacks in your web application
转自:云和山的彼端
相关文章推荐
- 通过程序使你的网站具有预防DOS攻击的能力 --提高站点的安全性
- 通过程序来操作iis生成网站或虚拟目录的操作集合。并设置网站具有net2.0属性。设置主目录等属性
- 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。
- 增强Delphi程序安全性的几个想法,提高反破解能力
- 增强Delphi程序安全性的几个想法,提高反破解能力
- IIS通过共享文件夹发布aspx程序站点(部分为原创)
- 50个提高PHP网站程序执行效率的技巧
- Nginx禁止直接通过IP地址访问网站以及限制IP登陆某目录(关闭默认站点或空主机头)
- 通过心理学知识提高问题定位与解决能力(上)
- 如何通过程序对站点进行装配
- UNIX设计的思想。让每个程序只具有一项专门的能力,然后让它们合作
- 采用AJAX提高网站程序的带宽性能
- 通过MEF来创建具有扩展能力的WCF Creating WCF Service Extensibility through MEF (Managed Extensibility Framework)
- php下过滤html代码的函数 提高程序安全性
- Kivy A to Z -- 通过绑定进程运行CPU提高Python程序在多核CPU平台上的性能
- EJB通过ANT提高EJB应用的开发效率、开发具有本地接口的无状态bean、开发有状态bean
- 通过生成 llvm IR,提高程序的执行性能
- 通过网页修改activex安全设置,添加信任站点,禁用弹出窗口阻止程序
- 提高IIS+ASP网站安全性的方法
- 在网站所在文件夹创建软件策略,阻止黑客通过网站上传的程序文件的运行