• 防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中值就可以了,不用修改程序代码了。

    多思考,多创新,才是正道!
  • 相关阅读:
    从点子到产品
    基础设计模式
    SpringBoot单元测试
    结构化思维
    考试脑科学读书笔记
    爆发式成长的思维
    人人都是产品经理笔记
    文本处理工具awk
    CSP-S2019【绍兴一中集训】
    寒假集训【1.28】
  • 原文地址:https://www.cnblogs.com/shuang121/p/1969369.html
Copyright © 2020-2023  润新知