技术开发 频道

ASP.NET性能提升之Membership表和阻止DOS攻击

  阻止决绝服务(DOS)攻击

  对黑客而言,Web服务是最容被袭击的目标,因为甚至一个入门级的黑客都可以通过重复调用一个代价昂贵的Web服务来使服务器死掉。像Pageflakes这样以Ajax技术构建的页面并将其作为起始页的站点将是DOS攻击的最大目标,因为如果你仅仅是在无需保存cookie的情况下重复地访问主页,这样每次点击都会产生一个新的用户、新的页面配置、新的widgets等。第一次访问是花费代价最昂贵的一次。

  可是这也是最容易暴露并搞垮站点的一次机会。你可以自己试试这种方式,仅仅需要如下一段简单的代码即可:

for( int i = 0; i < 100000; i ++ )
{
   WebClient client
= new WebClient();
   client.DownloadString(
"http://www.pageflakes.com/default.aspx");
}

  令你感到吃惊的是,你会注意到,在进行两次调用之后,你不会得到一个有效的响应。这并不是说你已经成功地将服务器搞垮了。而是因为你的请求被决绝了。你可能会乐意你不再获得任何服务了,因此你达到了决绝服务(你自己)的目的。我们很高兴决绝了你的服务(DYOS)。

  我提出的这种简便技巧就是记住从某个特殊IP地址发来的请求。当请求的数量超过阀门值时,便决绝后续发来的请求。这个办法是在ASP.NET缓存中记住调用者的IP并为每个IP维护一个计数的请求。当该计数值超过了预定义的限定值时,决绝一段时期后的发来的请求,比如10分钟。10分钟后,再次允许来自那个IP的请求。

  我有一个名为ActionValidator的类,该类包涵了一些具体的活动诸如首次访问、再次访问、异步回传、添加新的widget、添加新的页面等等。检查这种指定活动的计数值是否指向了一个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
         Postback = 5000,    // Not must of a problem for us
         AddNewWidget = 100,
         AddNewPage
= 100,
     }

  该枚举包涵了活动的类型以便用来在某个持续的时间――10分钟检查它们的阀门值。

0
相关文章