游戏技术文章

ASP.NET网站限制访问频率

时间:2016-11-18 14:54:21  作者:棋牌资源网  来源:棋牌资源网  查看:8182  评论:0
内容摘要:   最近做了一个免费发短信的小网站(http://www.pahuai.com/),但发现最近有人破解了我的验证码,以每3秒/条的速度用我的短信服务来发他的广告。更换验证码程序和过滤关键字只是治标不治本的方法,为了彻底阻止此类事件的发生,我们还是来看一下怎样...
   最近做了一个免费发短信的小网站(http://www.pahuai.com/),但发现最近有人破解了我的验证码,以每3秒/条的速度用我的短信服务来发他的广告。更换验证码程序和过滤关键字只是治标不治本的方法,为了彻底阻止此类事件的发生,我们还是来看一下怎样通过优化程序来实现。

     其实同样的程序除了防止别人滥发请求以外,还对预防拒绝服务(DoS)攻击同样适用哦。不妨来看看。

     基本目标:限制同一IP访问网站的频率。比如,我们限制为每240分钟来自同一IP的用户最多只能够访问首页40次、其他页面200次。

     比如您现在可以打开http://www.pahuai.com/ 这个网站试一试,刷新40次,就可以发现您在4小时内无法再次访问到正确的网站内容了。

     基本思想

    1. 用HttpContext.Cache记录访问次数
    2. 将IP值与用户访问方式作为共同的Key,可以对用户的不同访问方式做不同的限制。
    3. 超出限额时调用Response.End()。

    具体代码:

        一、   定义持续时间

               在本例中,我们使用240分钟作为一次限制的时间。

private const int DURATION = 240   

        二、定义访问方式枚举

    针对不同的访问方式进行不同的限制。在本例中,我们只区分两种访问方式:正常访问与PostBack。在正常应用中,您还可以根据需要增加访问不同页面的限制。

     public enum ActionTypeEnum
         {
             Normal=40,
             Postback=100
         }

         三、判断逻辑

    1. 在某IP第一次采用某种访问方式进行访问时,增加Cache的Key=访问方式+IP,返回True
    2. 如果Key已经存在,增加访问次数,返回True
    3. 如果超出次数,返回False
          public static bool IsValid(ActionTypeEnum actionType)
            {
                HttpContext context = HttpContext.Current;
                if (context.Request.Browser.Crawler) return false;
                string key = actionType.ToString() + context.Request.UserHostAddress;

                int hit = (Int32)(context.Cache[key] ?? 0);
                if (hit > (Int32)actionType) return false;
                else hit++;

                if (hit == 1)
                {
                    context.Cache.Add(key, hit, null, DateTime.Now.AddMinutes(DURATION), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null);

                }
                else
                {
                    context.Cache[key] = hit;
                }
                return true;
            }

             四、在页面中调用

      判断函数需要在页面的OnInit方法中调用。在这里需要使用一些自己定义的逻辑,来进行不同访问方式的判断。下面的例子是一个最简单的,只区分正常访问与Postback。

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    if (!IsPostBack)
    {
        if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.Normal))
        {
            Response.Write("您发送得太频繁,被系统判断为广告。广告或其他定制业务请联系邮箱admin@cloudera.cn,谢谢。- http://freesms.cloudapp.net");
            Response.End();
        }
    }
    else
    {
        if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.Postback))
        {
            Response.Write("您发送得太频繁,被系统判断为广告。广告或其他定制业务请联系邮箱admin@cloudera.cn,谢谢。- http://freesms.cloudapp.net");
            Response.End();
        }
    }
}

 

PS: 敌人总是狡诈的 ,后来我又发现那个人通过使用代理来变换IP ,继续通过我的服务发送广告。这就要继续优化程序了,比如把广告内容的md5也作为key记录下来。也许您也一样,需要面对各种各样的“敌情”。呵呵,希望本文对您有所帮助!

标签:ASP.NET网站限制访问频率 

欢迎加入VIP,【VIP售价:只要288元永久VIP会员】畅享商业棋牌游戏程序下载,点击开通!

下载说明


☉本站所有源码和资源均由站长亲自测试-绝对保证都可以架设,运营!
☉如源码和资源有损坏或所有链接均不能下载,请告知管理员,

☉本站软件和源码大部分为站长独资,资源购买和收集,放心下载!

☉唯一站长QQ:1004003180  [人格担保-本站注重诚信!]

☉购买建议E-mail:1004003180@qq.com   源码收购 E-mail:1004003180@qq.com    

☉本站文件解压密码  【文章内都自带解压密码,每个密码不同!】


本站提供的所有源码,均来源站长提供,仅学习交流 浙ICP备09009969号

由此产生不良后果和法律责任与本站无关,如果侵犯了您的版权,请来信告知 1004003180@qq.com 将及时更正和删除! 

Copyright © 2008-2024 棋牌资源网,你身边的棋牌资源下载站    All Rights Reserved