机器多次恶意提交攻击简单防范

简介:

先说背景:机器不断的发送请求或者恶意提交,会给服务器造成很大压力;针对这种攻击最优的策略是判断提交次数,产生动态验证码,即判断ip规定时间内重复发送达到N次弹出验证码。下面是小拽在实践过程中一个简单的识别ip,利用session记录和防御的过程。

识别和校验ip

过程如下;

  • 识别ip
  • ip属于白名单直接通过[白名单策略:内网ip+指定ip表]
  • 利用session存储ip的请求时间戳
  • 校验规定时间内ip的请求次数
  • 采取相应的措施
/**
 * 获取和校验ip;同时防止短时间内多次提交
 *
 * @notice        :弹出验证码,需要替换掉echo $echo_str 即可。
 * @return string :返回校验成功的ip
 */
protected function getAndCheckIP()
{

    // 获取环境ip
    if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
        $ip = getenv("HTTP_CLIENT_IP");
    else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
        $ip = getenv("HTTP_X_FORWARDED_FOR");
    else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
        $ip = getenv("REMOTE_ADDR");
    else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
        $ip = $_SERVER['REMOTE_ADDR'];
    else
        $ip = "unknown";

    // check 环境ip
    if (!$this->isWhiteList($ip)) {
        $echo_str = "提交过于频繁,请稍后再试!";
        // 构建ip的时间栈数据
        if (!is_array($_SESSION[$ip])) {
            $_SESSION[$ip] = array();
        }

        if (isset($_SESSION[$ip][0])) {
            $_SESSION[$ip][] = time();

            // session 保存时间为6小时。清理session
            $post_interval_first = time() - $_SESSION[$ip][0];
            if ($post_interval_first > 21600) {
                $_SESSION[$ip] = array();
            }

            // 两次提交小于1s,禁止提交
            $post_interval_pre = time() - $_SESSION[$ip][count($_SESSION[$ip]) - 3];
            if ($post_interval_pre < 1) {
                echo $echo_str;
                exit;
            };

            // 您在10s内已经提交了3请求,禁止提交
            $post_interval_third = time() - $_SESSION[$ip][count($_SESSION[$ip]) - 3];
            if (isset($_SESSION[$ip][3]) && ($post_interval_third < 10)) {
                echo $echo_str;
                exit;
            }

            // 您在1分钟期间已经提交了5请求,禁止提交
            $post_interval_fifth = time() - $_SESSION[$ip][count($_SESSION[$ip]) - 3];
            if (isset($_SESSION[$ip][5]) && ($post_interval_fifth < 60)) {
                echo $echo_str;
                exit;
            }

            // 6小时内提交10次,禁止提交
            if (isset($_SESSION[$ip][10])) {
                echo $echo_str;
                exit;
            }
        } else {
            $_SESSION[$ip][] = time();
        }
    }

    return ($ip);
}

白名单策略

白名单策略采用:内网ip放行和特定ip放行

/**
 * 检验是否存在于白名单中
 *
 * @param $ip    :校验的ip
 * @return bool  :校验结果
 */
function isWhiteList($ip){
    /**
     * 内网ip默认全部存在于白名单中
     */
    if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)){
        return true;
    }

    // 是否在写死的whitelist 里面
    return in_array($ip,$this->_WHTTE_LIST);
}

防攻击策略

小拽采用的比较简单的策略,如上面代码,实际过程中可以结合业务需求。

  • 1s内禁止重复提交
  • 5s内提交上限3次
  • 60s内提交上限5次
  • 6小时内提交上限10次

【转载请注明:机器多次恶意提交攻击简单防范 | 靠谱崔小拽

相关文章
|
7月前
|
存储 开发框架 安全
如何处理预防XSS漏洞攻击问题
防止XSS攻击需要从多个方面入手,包括输入验证和过滤、输出编码、设置正确的HTTP头部、使用最新的安全框架和库、定期进行安全审计和漏洞扫描以及培训和意识提升等。只有综合运用这些措施,才能有效地防止XSS攻击,保护网站和用户的安全。
|
网络协议 安全 网络安全
渗透攻击实例-拒绝服务
渗透攻击实例-拒绝服务
|
安全 网络安全 PHP
网络安全-RCE(远程命令执行)漏洞原理、攻击与防御
网络安全-RCE(远程命令执行)漏洞原理、攻击与防御
1203 0
网络安全-RCE(远程命令执行)漏洞原理、攻击与防御
|
云安全 域名解析 安全
警惕主动外联!云防火墙检测拦截勒索、Muhstik僵尸网络等 Log4j2漏洞利用
近期,阿里云安全观测到,在 Apache Log4j2 漏洞攻击全程中,无论是在漏洞利用阶段,还是后续要进行验证和进一步的控制利用,大多涉及多次受害服务器的主动外联,云防火墙已陆续发现并拦截60余万次涉及勒索、挖矿家族的漏洞利用行为。
998 0
警惕主动外联!云防火墙检测拦截勒索、Muhstik僵尸网络等 Log4j2漏洞利用
|
2月前
|
安全 网络协议 NoSQL
SSRF漏洞深入利用与防御方案绕过技巧
SSRF漏洞深入利用与防御方案绕过技巧
203 0
|
7月前
|
存储 安全 Android开发
安卓安全性指南:保护用户数据免受恶意攻击
【4月更文挑战第13天】本文是安卓应用安全开发指南,强调了在数字化时代保护移动设备安全的重要性,特别是针对安卓平台。开发者应理解安卓的安全架构,使用最新SDK,安全存储数据(如加密和权限管理),执行代码安全实践,应用签名,遵循安全编码标准,定期审计,及用户教育。通过这些措施,可降低应用遭受恶意攻击的风险,确保用户数据安全。
148 6
|
7月前
|
安全 网络安全 API
为什么黑客要攻击你的网站?如何保护网站再被攻击的情况下没有影响!!!!
2023年一季度报告显示,全球超1400万网站遭超10亿次攻击,网络安全风险上升。黑客攻击网站主要动机包括财务收益(如数据窃取、恶意软件传播)、服务中断、企业间谍、黑客行动主义、国家支持的攻击及私人原因。攻击手段涉及损坏的访问控制、开源组件的缺陷、服务器和客户端漏洞、API漏洞及共享主机风险。保护网站的措施包括持续扫描、渗透测试、同步测试与修补、集成WAAP到CI/CD、准备DDoS防御及使用垃圾邮件过滤。
|
7月前
|
存储 安全 网络安全
怎么看服务器是中毒了还是被攻击?以及后续处理方案
怎么看服务器是中毒了还是被攻击?以及后续处理方案
|
7月前
|
SQL 安全 网络安全
网站服务器被入侵了,如何排查入侵痕迹,又该如何预防入侵呢?
预防服务器入侵是一项重要的任务,需要采取一系列措施来保护服务器的安全。以下是一些预防服务器入侵的建议
网站服务器被入侵了,如何排查入侵痕迹,又该如何预防入侵呢?
|
7月前
|
SQL 监控 安全
如何发现服务器被入侵了,服务器被入侵了该如何处理?
如何发现服务器被入侵了,服务器被入侵了该如何处理?