通过程序使你的网站具有预防DOS攻击的能力 --提高站点的安全性

如果不对客户端采取访问控制策略,一个网站很容易被DOS攻击。因此有必要采取措施。
例如运行以下代码:
for int  i  =   0 ; i  <   100000 ; i  ++  )
{
   WebClient client 
=   new  WebClient();
   client.DownloadString(
" [url]http://www.yourwebsite.com/default.aspx[/url] " );
}
几分钟后,如果你的站点出现无法显示,则说明站点已经被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攻击)