防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

猜你喜欢

转载自www.cnblogs.com/youmingkuang/p/10048318.html