ホームページ バックエンド開発 PHPチュートリアル 複数の悪意のあるマシン送信攻撃を簡単に防止

複数の悪意のあるマシン送信攻撃を簡単に防止

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

まず背景について話しましょう。この種の攻撃では、マシンがリクエストや悪意のある送信を継続的に送信すると、サーバーに多大な負荷がかかります。以下は、IP を識別し、実際にセッションの記録と防御を使用する簡単なプロセスです。 最优的策略是判断提交次数,产生动态验证码,即判断ip规定时间内重复发送达到N次弹出验证码

IP

を識別および検証するプロセスは次のとおりです。

  • IPがホワイトリストに属していることを[ホワイトリストポリシー:イントラネット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>
ログイン後にコピー
  • ホワイトリスト戦略

    ホワイトリスト戦略は、イントラネットIPリリースと特定IPリリース
  • <code>/**
     * 检验是否存在于白名单中
     *
     * @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);
    }
    </code>
    ログイン後にコピー
    を採用します攻撃対策戦略

    Xiaoya は、上記のコードのような比較的単純な戦略を採用しており、実際のプロセスでのビジネス ニーズと組み合わせることができます。

    1秒以内の重複投稿禁止

    • 5秒以内に3回まで

    • 60秒以内に最大5回まで

    • 6時間以内に最大10回まで

    • 【転載の際は明記してください】している:マシンによる複数の悪意のある送信攻撃を簡単に防止 信頼できる崔暁燕】

      上記では、次の側面を含む、マシン上での複数の悪意のある送信攻撃の簡単な防止方法を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    Web サイトは、nginx を通じてブラック/ホワイトリスト IP 制限や国および都市の IP アクセス制限をどのように設定しますか? Web サイトは、nginx を通じてブラック/ホワイトリスト IP 制限や国および都市の IP アクセス制限をどのように設定しますか? Jun 01, 2023 pm 05:27 PM

    1. ブラック/ホワイト リストの IP 制限付きアクセス設定 nginx ブラック リストとホワイト リストを設定するにはいくつかの方法がありますが、ここでは一般的に使用される 2 つの方法のみを紹介します。 1. 最初の方法:allow、denydeny、およびallow命令はngx_http_access_moduleに属しており、nginxはデフォルトでこのモジュールをロードするため、直接使用できます。この方法は最も単純で直接的です。この設定はファイアウォールの iptable に似ています。使用方法: 構成ファイルに直接追加します: #Whitelist 設定の後に、アクセス可能な許可 IPlocation/{allow123.13.123.12;allow23.53.32.1/100;denyall;}#ブラックリスト設定、

    WeChatでIPアドレスを確認する方法 WeChatでIPアドレスを確認する方法 May 31, 2023 am 09:16 AM

    WeChat で IP アドレスを確認する方法: 1. パソコン版 WeChat にログインし、画面下のタスクバーを右クリックし、「タスク マネージャー」をクリックします。 2. タスク マネージャーが表示されたら、「」をクリックします。左下隅の「詳細」をクリックします; 3. タスク管理 ブラウザの「パフォーマンス」オプションを入力し、「リソース モニターを開く」をクリックします; 4. 「ネットワーク」を選択し、WeChat プロセス「Wechat.exe」を確認します; 5. 「」をクリックします。以下の「TCP 接続」を使用して、WeChat ネットワークの IP 関連の状況を監視します。メッセージを送信して返信を受け取ると、相手の IP アドレスがわかります。

    セッション失敗を解決する方法 セッション失敗を解決する方法 Oct 18, 2023 pm 05:19 PM

    セッション障害は通常、セッションの有効期間の期限切れまたはサーバーのシャットダウンによって発生します。解決策: 1. セッションの有効期間を延長する; 2. 永続ストレージを使用する; 3. Cookie を使用する; 4. セッションを非同期的に更新する; 5. セッション管理ミドルウェアを使用する。

    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=5nolay;}location/app/api{proxy_passhttp://192.168.1.111:8095/app/api}}#nginx は正確なマッチングを優先するため

    PHP セッションのクロスドメイン問題の解決策 PHP セッションのクロスドメイン問題の解決策 Oct 12, 2023 pm 03:00 PM

    PHPSession のクロスドメイン問題の解決策 フロントエンドとバックエンドの分離の開発では、クロスドメイン要求が標準になっています。クロスドメインの問題に対処するときは、通常、セッションの使用と管理が必要になります。ただし、ブラウザーのオリジンポリシーの制限により、デフォルトではセッションをドメイン間で共有できません。この問題を解決するには、いくつかの技術と方法を使用して、セッションのクロスドメイン共有を実現する必要があります。 1. ドメイン間でセッションを共有するための Cookie の最も一般的な使用法

    ローカルIPアドレスのクエリ ローカルIPアドレスのクエリ Jan 05, 2024 pm 01:42 PM

    このマシンの IP アドレスを照会する方法は次のとおりです。 1. Windows システムでは、「スタート メニュー」を開き、「cmd」を検索してコマンド プロンプトを開き、「ipconfig」と入力して Enter キーを押します。 「IPv4 アドレス」という名前の行、その隣の数字はマシンの IP アドレスです; 2. macOS システムで、画面の左上隅にある Apple アイコンをクリックし、「システム環境設定」を選択し、現在接続されているネットワークを見つけます「ネットワーク」オプションで「詳細」ボタンをクリックし、「TCP/IP」タブなどでマシンのIPを見つけます。

    Wi-Fi に IP 割り当てが表示されない場合はどうすればよいですか? Wi-Fi に IP 割り当てが表示されない場合はどうすればよいですか? Aug 30, 2023 am 11:58 AM

    Wi-Fi に IP 割り当てが表示されない場合の解決策: 1. デバイスとルーターを再起動し、デバイスの Wi-Fi 接続をオフにし、デバイスの電源を切り、ルーターの電源をオフにして、数分待ってから、ルーターを再度開いて Wi-Fi に接続します。 ; 2. ルーターの設定を確認し、DHCP を再起動し、DHCP 機能が有効になっていることを確認します; 3. ネットワーク設定をリセットすると、保存されているすべての WiFi ネットワークとパスワードが削除されます。この操作を実行する前にバックアップされていることを確認してください; 4. アップデートルーターのファームウェアを更新するには、ルーター管理インターフェイスにログインし、ファームウェアの更新オプションを見つけて、プロンプトに従います。

    Springboot2のセッションタイムアウト設定が無効になる問題の解決方法 Springboot2のセッションタイムアウト設定が無効になる問題の解決方法 May 22, 2023 pm 01:49 PM

    問題: 今日、プロジェクトで設定タイムアウトの問題が発生し、SpringBoot2 の application.properties への変更が反映されませんでした。解決策:server.* プロパティは、SpringBoot によって使用される埋め込みコンテナーを制御するために使用されます。 SpringBoot は、ServletWebServerFactory インスタンスの 1 つを使用してサーブレット コンテナのインスタンスを作成します。これらのクラスは、server.* プロパティを使用して、制御されるサーブレット コンテナ (tomcat、jetty など) を構成します。アプリケーションが war ファイルとして Tomcat インスタンスにデプロイされる場合、server.* プロパティは適用されません。それらは当てはまりませんが、

    See all articles