首頁 後端開發 php教程 機器多次惡意提交攻擊簡單防範

機器多次惡意提交攻擊簡單防範

Jul 29, 2016 am 09:07 AM
amp interval ip session

先說背景:機器不斷的發送請求或惡意提交,會對伺服器造成很大壓力;針對這種攻擊最優的策略是判斷提交次數,產生動態驗證碼,即判斷ip規定時間內重複發送達到N次彈出驗證碼。下面是小拽在實踐過程中一個簡單的辨識ip,利用session記錄和防禦的過程。

辨識與校驗ip

流程如下;

  • 辨識ip

  • ip屬於白名單直接透過[白名單策略:內網使用指定的請求時間戳

  • 校驗規定時間內ip的請求次數

  • 採取相應的措施

  • <code>/**
     * 获取和校验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);
    }
    </code>
    登入後複製

    白名單策略

  • 白防攻擊策略

小拽採用的比較簡單的策略,如上面程式碼,實際過程中可以結合業務需求。

1s內禁止重複提交

    5s內提交上限3次
  • 60s內提交上限5次提交上限機器多次惡意提交攻擊簡單防範| 靠譜崔小拽】
  • 以上就介紹了機器多次惡意提交攻擊簡單防範,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
網站怎麼透過nginx設定黑/白名單IP限制及國家城市IP存取限制 網站怎麼透過nginx設定黑/白名單IP限制及國家城市IP存取限制 Jun 01, 2023 pm 05:27 PM

一、黑/白名單IP限制存取配置nginx配置黑白名單有好幾種方式,這裡只介紹常用的兩種方法。 1.第一種方法:allow、denydeny和allow指令屬於ngx_http_access_module,nginx預設載入此模組,所以可直接使用。這種方式,最簡單,最直接。設定類似防火牆iptable,使用方法:直接設定檔中新增:#白名單設置,allow後面為可存取IPlocation/{allow123.13.123.12;allow23.53.32.1/100;denyall;}#黑名單設置,

nginx如何設定目錄白名單和ip白名單 nginx如何設定目錄白名單和ip白名單 May 18, 2023 pm 03:52 PM

1.設定目錄白名單:對指定請求路徑不設定限制,如對請求路徑為api目錄下的請求不做限制,則可寫為server{location/app{proxy_passhttp://192.168.1.111:8095/app ;limit_connconn20;limit_rate500k;limit_reqzone=fooburst=5nodelay;}location/app/api{proxy_passhttp://192.168.1.111:8095/app/api}}#因比率

微信怎麼查看ip位址 微信怎麼查看ip位址 May 31, 2023 am 09:16 AM

微信查看ip位址的方法:1、登入電腦版微信,右鍵點選螢幕下方的工作欄,點選「工作管理員」;2、彈出工作管理員時,點選左下角的「詳細資料」;3、工作管理器進入“性能”選項,點擊“打開資源監視器”;4、選擇“網絡”,勾選微信進程“Wechat.exe”;5、點擊下面的“TCP連接”即可監視微信網絡IP相關情況,發送訊息得到回覆就會顯示他人的IP位址。

session失效怎麼解決 session失效怎麼解決 Oct 18, 2023 pm 05:19 PM

session失效通常是由於 session 的生存時間過期或伺服器關閉導致的。其解決方法:1、延長session的生存時間;2、使用持久化儲存;3、使用cookie;4、非同步更新session;5、使用會話管理中介軟體。

PHP Session 跨域問題的解決方法 PHP Session 跨域問題的解決方法 Oct 12, 2023 pm 03:00 PM

PHPSession跨域問題的解決方法在前後端分離的開發中,跨域請求已成為常態。在處理跨域問題時,我們通常會涉及session的使用和管理。然而,由於瀏覽器的同源策略限制,跨域情況下預設無法共享session。為了解決這個問題,我們需要採用一些技巧和方法來實現session的跨域共享。一、使用cookie跨域共享session最常

Springboot2 session設定超時時間無效怎麼解決 Springboot2 session設定超時時間無效怎麼解決 May 22, 2023 pm 01:49 PM

問題:今天專案中遇到了一個設定時間逾時的問題,按SpringBoot2的application.properties變更一直不生效。解決方案:server.*屬性用於控制SpringBoot所使用的嵌入式容器。 SpringBoot將使用ServletWebServerFactory實例之一來建立servlet容器的執行個體。這些類別使用server.*屬性來配置受控的servlet容器(tomcat,jetty等)。當應用程式作為war檔部署到Tomcat實例時,server.*屬性不適用。它們不適用,

NGINX怎麼統計網站的PV、UV、獨立IP NGINX怎麼統計網站的PV、UV、獨立IP May 19, 2023 am 09:13 AM

概念:uv(uniquevisitor):獨立訪客,將每台獨立上網電腦(以cookie為依據)視為一位訪客,一天之內(00:00-24:00),造訪您網站的訪客數量。一天之內相同cookie的訪問只被計算1次pv(pageview):訪問量,即頁面瀏覽量或點擊量,用戶每次對網站的訪問均被記錄1次。用戶對同一頁面的多次訪問,訪問量值累計統計獨立ip:00:00-24:00內相同ip地址只被計算一次,做網站優化的朋友最關心這個先聲明下環境,此次運行的nginx版本1.7,後端tomcat運行的是動

wifi顯示無ip分配怎麼辦 wifi顯示無ip分配怎麼辦 Aug 30, 2023 am 11:58 AM

wifi顯示無ip分配的解決方案:1、重新啟動設備和路由器,關閉設備上的Wi-Fi連接,關閉設備,關閉路由器,等待幾分鐘,然後重新打開路由器鏈接wifi;2、檢查路由器設置,重啟DHCP,確保DHCP功能已啟用;3、重置網路設置,將刪除所有已儲存的WiFi網路和密碼,在執行此操作之前,請確保已備份;4、更新路由器韌體,登入路由器管理介面,查找韌體更新選項,並按照提示進行操作。

See all articles