zoukankan      html  css  js  c++  java
  • 防cc攻击策略

    黑客攻击你的网站,会采取各种各样的手段,其中为了降低你网站的访问速度,甚至让你的服务器瘫痪,它会不断的刷新你的网站,或者模拟很多用户同一时间大量的访问你的网站,

    这就是所谓的CC攻击,这就需要我们在程序里添加一些防CC攻击的策略代码,下面就来介绍一下自己最近写的一段代码,拿来供大家分享:

    using System;
    using System.Configuration;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.IO;
    
    public partial class _Default : System.Web.UI.Page
    {
    
        string getIp = null;
    
        protected void Page_Load(object sender, EventArgs e)
        {
    
            if (!IsPostBack)
    
            {
    
                GetCC();
    
            }
    
        }
    
        //放CC攻击
        public void GetCC()
        {
    
            string FYCC_05 = "";
    
            //'CCLog.txt存放的路径文件夹!需要手动创建!建议留空
    
            //'如果输入,请在前面加上符号"/"
    
            int FYCC_18 = 1;
    
            //'防刷新频繁CC攻击关闭与启动,1为启动0为关闭
    
            int FYCC_17 = 1;
    
            //'防刷新禁止IP功能关闭与启动,1为启动0为关闭
    
            int FYCC_19 = 6;
    
            //'每分钟刷新次数,将会出现提示
    
            string FYCC_20 = "http://www.163.com";
    
            //'被封IP后自动转入的页面,建议输入存放病毒的网址!!!
    
            int FYCC_21 = 12;
    
            //'恶意刷新几次将禁止IP
    
            string realip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];//获得代理ip
    
            string proxy = Request.ServerVariables["REMOTE_ADDR"];//获得普通ip
    
            // getIp = GetIP();
    
    
    
            if (realip == null)
            {
    
                getIp = proxy;
    
            }
            else
            {
    
                getIp = realip;
    
            }
    
            string path = Server.MapPath("~/");
    
            if (!System.IO.File.Exists(path + "/CCLOG/CCLOG.txt"))
    
            {
    
                System.IO.File.CreateText(path + "/CCLOG/CCLOG.txt");
    
            }
    
            StreamReader reader = new StreamReader(path + "/CCLOG/CCLOG.txt");
    
            string readFile = reader.ReadToEnd();
    
            reader.Close();
    
            if (readFile.Contains(getIp))
            {
    
                Response.Write("您的IP" + getIp + "已经被禁止!如需要解封,请联系本站管理员')");
    
                Response.End();
    
            }
    
            if (Convert.ToInt32(Session["FYCC_01"]) > FYCC_19 && DateTime.Now.Minute != Convert.ToInt32(Session["FYCC_02"]))
            {
    
                Session["FYCC_01"] = "1";
    
                Session["FYCC_02"] = DateTime.Now.Minute.ToString();
    
            }
    
            else if ((Convert.ToInt32(Session["FYCC_01"]) > FYCC_21 - 1) && (DateTime.Now.Minute == Convert.ToInt32(Session["FYCC_02"])))
            {
    
                if (FYCC_17 != 0 & Convert.ToInt32(Session["FYCC_01"]) > FYCC_21 - 1)
                {
    
                    OperationFile();
    
                }
    
                Response.Redirect("http://www.baidu.com");
    
            }
    
            else if ((Convert.ToInt32(Session["FYCC_01"]) > FYCC_19) && (DateTime.Now.Minute == Convert.ToInt32(Session["FYCC_02"])))
            {
    
                Response.Write("本站启动防刷新功能,1分钟内只能翻" + FYCC_19 + "页,请在下一分钟再刷新本页面");
    
                Session["FYCC_01"] = (Convert.ToInt32(Session["FYCC_01"]) + 1).ToString();
    
    
    
                Response.End();
    
            }
    
            else
            {
    
                if (Session["FYCC_01"] == "")
                {
    
                    Session["FYCC_01"] = "1";
    
                    Session["FYCC_02"] = DateTime.Now.Minute.ToString();
    
                }
    
                else
    
                {
    
                    if (DateTime.Now.Minute != Convert.ToInt32(Session["FYCC_02"]))
                    {
    
                        Session["FYCC_01"] = "1";
    
                        Session["FYCC_02"] = DateTime.Now.Minute.ToString();
    
                    }
                    else
                    {
    
                        Session["FYCC_01"] = (Convert.ToInt32(Session["FYCC_01"]) + 1).ToString();
    
                    }
    
                }
    
            }
    
        }
    
        //向文件中添加Ip
    
        private void OperationFile()
        {
    
            string path = Server.MapPath("~/");
    
            if (!System.IO.File.Exists(path + "/CCLOG/CCLOG.txt"))
    
            {
    
                System.IO.File.CreateText(path + "/CCLOG/CCLOG.txt");
    
            }
    
            StreamWriter w = File.AppendText(path + "/CCLOG/CCLOG.txt");
    
            w.WriteLine(getIp);
    
            w.Close();
    
        }
    
    }

    原理很清晰,简单的说一下:

    当刷新的时候就记录他的刷新数,一分钟之内达到你设定的值,比如30次就给给予提示,不能频繁刷新,过下一分钟在刷新就好了,然后刷新数从头开始计算,假如恶意刷新很多次,就记录她的IP,然后将其封掉,只能联系管理员才能解除,这些的话就可以限制恶意的cc攻击了

    上面的代码我们可以把一下开关,设定的值写在web.config中,这样的话直接修改web.config中值就可以了,不用修改程序代码了。

     

     

    from:https://www.cnblogs.com/shuang121/archive/2011/03/02/1969369.html

  • 相关阅读:
    北极星杯 awd复现
    5,linux入门到上手-文件与文件系统的压缩,打包与备份
    4,linux入门到上手-文件与目录相关操作
    ctf中 preg_match 绕过技术 | 无字母数字的webshell
    巅峰极客 2019部分题解 writeup
    使用python爬去中国最好大学排名2016年
    python进制转换
    python应用-爬取猫眼电影top100
    3,linux入门到上手-文件权限管理与配置
    DNS、域、域名及FQDN 概念
  • 原文地址:https://www.cnblogs.com/youmingkuang/p/10048318.html
Copyright © 2011-2022 走看看