ВычисляСм ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Β«Π·Π»Ρ‹Ρ…Β» Π±ΠΎΡ‚ΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡ… ΠΏΠΎ IP

ВычисляСм ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… «Π·Π»Ρ‹Ρ…» Π±ΠΎΡ‚ΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡ… ΠΏΠΎ IP

Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ дня! Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ расскаТу ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ хостинга ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ IP адрСса Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ излишнюю Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° сайт ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ срСдств хостинга, Π±ΡƒΠ΄Π΅Ρ‚ Β«Ρ‡ΡƒΡ‚ΡŒ-Ρ‡ΡƒΡ‚ΡŒΒ» php ΠΊΠΎΠ΄Π°, нСсколько ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ΠΎΠ².

Π’Π²ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

  1. Π‘Π°ΠΉΡ‚ созданный Π½Π° CMS WordPress
  2. Π₯остинг Π‘Π΅Π³Π΅Ρ‚ (это Π½Π΅ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ°, Π½ΠΎ скрины Π°Π΄ΠΌΠΈΠ½ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ этого хостинг ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°)
  3. WordPress сайт Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π³Π΄Π΅ Ρ‚ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ 2000 ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ большоС количСство статСй ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ²
  4. ВСрсия PHP 7.2
  5. WP ΠΈΠΌΠ΅Π΅Ρ‚ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ
  6. Π‘ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΡ€ сайт Π½Π°Ρ‡Π°Π» Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° MySQL ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ хостинга. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π»ΠΎ 120% ΠΎΡ‚ Π½ΠΎΡ€ΠΌΡ‹ Π½Π° ΡƒΡ‡Ρ‘Ρ‚Π½ΡƒΡŽ запись
  7. По Π΄Π°Π½Π½Ρ‹ΠΌ ЯндСкс. ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠ° сайт посСщаСт 100-200 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π² сутки

Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±Ρ‹Π»ΠΎ сдСлано:

  1. ΠžΡ‡ΠΈΡ‰Π΅Π½Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π‘Π” ΠΎΡ‚ накопившСгося мусора
  2. ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹, ΡƒΠ±Ρ€Π°Π½Ρ‹ участки ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°

ΠŸΡ€ΠΈ этом ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈΡΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ(ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ), ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ наблюдСния β€” Π½ΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² 120% ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сайта Π±Ρ‹Π»Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Π° ΠΈ ΠΌΠΎΠ³Π»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ расти.

Π’ΠΎ ΠΊΠ°ΠΊ выглядСла примСрная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠΎ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… хостинга

ВычисляСм ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… «Π·Π»Ρ‹Ρ…» Π±ΠΎΡ‚ΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡ… ΠΏΠΎ IP
Π’ Ρ‚ΠΎΠΏΠ΅ находится сайт ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ΄Ρ‘Ρ‚ Ρ€Π΅Ρ‡ΡŒ, Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ сайты ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Ρƒ ΠΆΠ΅ cms ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ ΠΏΠΎΡΠ΅Ρ‰Π°Π΅ΠΌΠΎΡΡ‚ΡŒ, Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ мСньшС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Анализ

  • Π‘Ρ‹Π»ΠΎ прСдпринято ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ наблюдСния Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… нСдСль (Π±Π»Π°Π³ΠΎ хостинг Π·Π° это врСмя ΠΌΠ½Π΅ Π½ΠΈ Ρ€Π°Π·Ρƒ Π½Π΅ написал Ρ‡Ρ‚ΠΎ я Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΈ мСня ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚)
  • Π‘Ρ‹Π» Π°Π½Π°Π»ΠΈΠ· ΠΈ поиск ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… запросов, Π·Π°Ρ‚Π΅ΠΌ Π±Ρ‹Π»Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° структура Π‘Π” ΠΈ Ρ‚ΠΈΠΏ Ρ‚Π°Π±Π»ΠΈΡ†
  • Для Π°Π½Π°Π»ΠΈΠ·Π° Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ использовался встроСнный AWStats (ΠΎΠ½ кстати ΠΏΠΎΠΌΠΎΠ³ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ самый Π·Π»ΠΎΠΉ IP адрСс ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΌΡƒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°
  • ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠ° β€” ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ° Π΄Π°Ρ‘Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Π»ΡŽΠ΄ΡΡ…, Π° Π½Π΅ ΠΎ Π±ΠΎΡ‚Π°Ρ…
  • Π‘Ρ‹Π»ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ для WP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΌΠ΅ΡŽΡ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ посСтитСлСй Π΄Π°ΠΆΠ΅ ΠΏΠΎ странС нахоТдСния ΠΈ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ комбинациям
  • БовсСм Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ способ оказался Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ сайт Π½Π° сутки с ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Β«ΠœΡ‹ Π½Π° тСхничСском обслуТивании» β€” это Π±Ρ‹Π»ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ сдСлано ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚ΠΎΠ³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π°. Π’ этом случаС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ ΡƒΠΏΠ°Π»Π°, Π½ΠΎ Π½Π΅ Π΄ΠΎ 0-Π»Π΅Π²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ идСология WP базируСтся Π½Π° Ρ…ΡƒΠΊΠ°Ρ… ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ свою Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ наступлСнии ΠΊΠ°ΠΊΠΎΠ³ΠΎ β€” Π»ΠΈΠ±ΠΎ Β«Ρ…ΡƒΠΊΠ°Β», Π° Π΄ΠΎ наступлСния Β«Ρ…ΡƒΠΊΠ°Β» ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ сдСланы запросы ΠΊ Π‘Π”

ИдСя

  1. Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ IP адрСса ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ запросов Π·Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  2. Π—Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ количСство ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ сайту
  3. На основС количСства ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ сайту
  4. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ записи Β«Deny fromΒ» Π² Ρ„Π°ΠΉΠ»Π΅ .htaccess
  5. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, Π²Ρ€ΠΎΠ΄Π΅ iptables ΠΈ ΠΏΡ€Π°Π²ΠΈΠ» для Nginx Π½Π΅ рассматривая, ΠΈΠ±ΠΎ ΠΏΠΈΡˆΡƒ ΠΏΡ€ΠΎ хостинг

Появилась идСя, Π·Π½Π°Ρ‡ΠΈΡ‚ Π½Π°Π΄ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π±Π΅Π· этого…

  • Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для накоплСния Π΄Π°Π½Π½Ρ‹Ρ…
    CREATE TABLE `wp_visiters_bot` (
    	`id` INT(11) NOT NULL AUTO_INCREMENT,
    	`ip` VARCHAR(300) NULL DEFAULT NULL,
    	`browser` VARCHAR(500) NULL DEFAULT NULL,
    	`cnt` INT(11) NULL DEFAULT NULL,
    	`request` TEXT NULL,
    	`input` TEXT NULL,
    	`data_update` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    	PRIMARY KEY (`id`),
    	UNIQUE INDEX `ip` (`ip`)
    )
    COMMENT='ΠšΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Ρ‹ для Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ'
    COLLATE='utf8_general_ci'
    ENGINE=InnoDB
    AUTO_INCREMENT=1;
    

    CREATE TABLE `wp_visiters_bot_blocked` (
    	`id` INT(11) NOT NULL AUTO_INCREMENT,
    	`ip` VARCHAR(300) NOT NULL,
    	`data_update` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    	PRIMARY KEY (`id`),
    	UNIQUE INDEX `ip` (`ip`)
    )
    COMMENT='Бписок ΡƒΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…'
    COLLATE='utf8_general_ci'
    ENGINE=InnoDB
    AUTO_INCREMENT=59;
    

    CREATE TABLE `wp_visiters_bot_history` (
    	`id` INT(11) NOT NULL AUTO_INCREMENT,
    	`ip` VARCHAR(300) NULL DEFAULT NULL,
    	`browser` VARCHAR(500) NULL DEFAULT NULL,
    	`cnt` INT(11) NULL DEFAULT NULL,
    	`data_update` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    	`data_add` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
    	PRIMARY KEY (`id`),
    	UNIQUE INDEX `ip` (`ip`)
    )
    COMMENT='Π˜ΡΡ‚ΠΎΡ€ΠΈΡ всСх запросов для Π΄Π΅Π±Π°Π³Π°'
    COLLATE='utf8_general_ci'
    ENGINE=InnoDB
    AUTO_INCREMENT=1;
    
  • Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ„Π°ΠΉΠ» Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ помСстим ΠΊΠΎΠ΄. Код Π±ΡƒΠ΄Π΅Ρ‚ запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ² Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈ вСсти ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ для Π΄Π΅Π±Π°Π³Π°.

    Код Ρ„Π°ΠΉΠ»Π°, для записи IP адрСсов

    <?php
    
    if (!defined('ABSPATH')) {
        return;
    }
    
    global $wpdb;
    
    /**
     * Π’Π΅Ρ€Π½Ρ‘Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ IP адрСс посСтитСля
     * @return boolean
     */
    function coderun_get_user_ip() {
    
        $client_ip = '';
    
        $address_headers = array(
            'HTTP_CLIENT_IP',
            'HTTP_X_FORWARDED_FOR',
            'HTTP_X_FORWARDED',
            'HTTP_X_CLUSTER_CLIENT_IP',
            'HTTP_FORWARDED_FOR',
            'HTTP_FORWARDED',
            'REMOTE_ADDR',
        );
    
        foreach ($address_headers as $header) {
            if (array_key_exists($header, $_SERVER)) {
    
                $address_chain = explode(',', $_SERVER[$header]);
                $client_ip = trim($address_chain[0]);
    
                break;
            }
        }
    
        if (!$client_ip) {
            return '';
        }
    
    
        if ('0.0.0.0' === $client_ip || '::' === $client_ip || $client_ip == 'unknown') {
            return '';
        }
    
        return $client_ip;
    }
    
    $ip = esc_sql(coderun_get_user_ip()); // IP адрСс посСтитСля
    
    if (empty($ip)) {// НСт IP, Π½Ρƒ ΠΈ ΠΈΠ΄ΠΈΡ‚Π΅ лСсом...
        header('Content-type: application/json;');
        die('Big big bolt....');
    }
    
    $browser = esc_sql($_SERVER['HTTP_USER_AGENT']); //Π”Π°Π½Π½Ρ‹Π΅ для Π°Π½Π°Π»ΠΈΠ·Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°
    
    $request = esc_sql(wp_json_encode($_REQUEST)); //ПослСдний запрос ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΊ сайту
    
    $input = esc_sql(file_get_contents('php://input')); //Π’Π΅Π»ΠΎ запроса, Ссли Π±Ρ‹Π»ΠΎ
    
    $cnt = 1;
    
    //Запрос Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠ½Π΄ΠΈΠ΄Π°Ρ‚Π°ΠΌΠΈ Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ
    $query = <<<EOT
        INSERT INTO wp_visiters_bot (`ip`,`browser`,`cnt`,`request`,`input`)
            VALUES  ('{$ip}','{$browser}','{$cnt}','{$request}','$input')
             ON DUPLICATE KEY UPDATE cnt=cnt+1,request=VALUES(request),input=VALUES(input),browser=VALUES(browser)
    EOT;
    
    //Запрос для истории
    $query2 = <<<EOT
        INSERT INTO wp_visiters_bot_history (`ip`,`browser`,`cnt`)
            VALUES  ('{$ip}','{$browser}','{$cnt}')
             ON DUPLICATE KEY UPDATE cnt=cnt+1,browser=VALUES(browser)
    EOT;
    
    
    $wpdb->query($query);
    
    $wpdb->query($query2);
    
    

    Π‘ΡƒΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ IP адрСс посСтитСля ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. Если ip ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ поля cnt (количСство запросов ΠΊ сайту)

  • Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ΅β€¦ БСйчас мСня соТгут Π·Π° ΠΌΠΎΠΈ дСйствиия πŸ™‚
    Π§Ρ‚ΠΎ Π±Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ сайту, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΊΠΎΠ΄ Ρ„Π°ΠΉΠ»Π° Π² Π³Π»Π°Π²Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» WordPress β€” wp-load.php. Π”Π° ΠΈΠΌΠ΅Π½Π½ΠΎ измСняСм Ρ„Π°ΠΉΠ» ядра ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ сущСствуСт глобальная пСрСмСнная $wpdb

Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ часто Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ IP адрСс отмСчаСтся Ρƒ нас Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈ с ΠΊΡ€ΡƒΠΆΠΊΠΎΠΉ ΠΊΠΎΡ„Π΅ заглядываСм Ρ‚ΡƒΠ΄Π° Ρ€Π°Π· Π² 5-ь ΠΌΠΈΠ½ΡƒΡ‚ для понимания ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹

ВычисляСм ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… «Π·Π»Ρ‹Ρ…» Π±ΠΎΡ‚ΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡ… ΠΏΠΎ IP

Π”Π°Π»ΡŒΡˆΠ΅ просто, скопировали Β«Π²Ρ€Π΅Π΄Π½Ρ‹ΠΉΒ» IP, ΠΎΡ‚ΠΊΡ€Ρ‹Π»ΠΈ Ρ„Π°ΠΉΠ» .htaccess ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°

Order allow,deny
Allow from all
# start_auto_deny_list
Deny from 94.242.55.248
# end_auto_deny_list

Всё, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ 94.242.55.248 β€” Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ доступа ΠΊ сайту ΠΈ Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° Π‘Π”

Но ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Ρ‚Π°ΠΊ Ρ€ΡƒΠΊΠ°ΠΌΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€Π°Π²Π΅Π΄Π½ΠΎΠ΅ занятиС, Π΄Π° ΠΈ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΊΠΎΠ΄ задумывался ΠΊΠ°ΠΊ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ CRON ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 30 ΠΌΠΈΠ½ΡƒΡ‚:

Код Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ .htaccess

<?php

/**
 * Π€Π°ΠΉΠ» автоматичСского задания Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΏΠΎ IP адрСсу
 * Π”ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· CRON
 */
if (empty($_REQUEST['key'])) {
    die('Hello');
}

require('wp-load.php');

global $wpdb;

$limit_cnt = 70; //Π›ΠΈΠΌΠΈΡ‚ запросов ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΡ‚Π±ΠΈΡ€Π°Ρ‚ΡŒ

$deny_table = $wpdb->get_results("SELECT * FROM wp_visiters_bot WHERE cnt>{$limit_cnt}");

$new_blocked = [];

$exclude_ip = [
    '87.236.16.70'//адрСс хостинга
];

foreach ($deny_table as $result) {

    if (in_array($result->ip, $exclude_ip)) {
        continue;
    }

    $wpdb->insert('wp_visiters_bot_blocked', ['ip' => $result->ip], ['%s']);
}

$deny_table_blocked = $wpdb->get_results("SELECT * FROM wp_visiters_bot_blocked");

foreach ($deny_table_blocked as $blocked) {
    $new_blocked[] = $blocked->ip;
}

//ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
$wpdb->query("DELETE FROM wp_visiters_bot");

//echo '<pre>';print_r($new_blocked);echo '</pre>';

$file = '.htaccess';

$start_searche_tag = 'start_auto_deny_list';

$end_searche_tag = 'end_auto_deny_list';

$handle = @fopen($file, "r");
if ($handle) {

    $replace_string = '';//ВСст для вставки Π² Ρ„Π°ΠΉΠ» .htaccess

    $target_content = false; //Π€Π»Π°Π³ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π½Π°ΠΌ участка ΠΊΠΎΠ΄Π°

    while (($buffer = fgets($handle, 4096)) !== false) {

        if (stripos($buffer, 'start_auto_deny_list') !== false) {
            $target_content = true;
            continue;
        }

        if (stripos($buffer, 'end_auto_deny_list') !== false) {
            $target_content = false;

            continue;
        }

        if ($target_content) {
            $replace_string .= $buffer;
        }
    }
    if (!feof($handle)) {
        echo "Ошибка: fgets() Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠ΅Π» Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒn";
    }
    fclose($handle);
}

//Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» .htaccess
$content = file_get_contents($file);

$content = str_replace($replace_string, '', $content);

//ΠžΡ‡ΠΈΡ‰Π°Π΅ΠΌ всС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ .htaccess
file_put_contents($file, $content);

//Π—Π°ΠΏΠΈΡΡŒ Π½ΠΎΠ²Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ
$str = "# {$start_searche_tag}" . PHP_EOL;

foreach ($new_blocked as $key => $value) {
    $str .= "Deny from {$value}" . PHP_EOL;
}

file_put_contents($file, str_replace("# {$start_searche_tag}", $str, file_get_contents($file)));

Код Ρ„Π°ΠΉΠ»Π° достаточно прост ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π΅Π½ ΠΈ главная Π΅Π³ΠΎ идСя Π² Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π²Π·ΡΡ‚ΡŒ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ² Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈ Π²ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π±Π»ΠΎΠΊΠΈΡ€Π²ΠΎΠΊΠΈ Π² Ρ„Π°ΠΉΠ» .htaccess ΠΌΠ΅ΠΆΠ΄Ρƒ коммСнтариями
# start_auto_deny_list ΠΈ # end_auto_deny_list

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Β«Π²Ρ€Π΅Π΄Π½Ρ‹Π΅Β» ip Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ сами собой, Π° Ρ„Π°ΠΉΠ» .htaccess выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Order allow,deny
Allow from all

# start_auto_deny_list
Deny from 94.242.55.248
Deny from 207.46.13.122
Deny from 66.249.64.164
Deny from 54.209.162.70
Deny from 40.77.167.86
Deny from 54.146.43.69
Deny from 207.46.13.168
....... Π½ΠΈΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ адрСса
# end_auto_deny_list

Π’ ΠΈΡ‚ΠΎΠ³Π΅ послС Π½Π°Ρ‡Π°Π»Π° дСйствия Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² хостинг ΠΏΠ°Π½Π΅Π»ΠΈ:

ВычисляСм ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… «Π·Π»Ρ‹Ρ…» Π±ΠΎΡ‚ΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡ… ΠΏΠΎ IP

PS: ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» авторский, Ρ…ΠΎΡ‚ΡŒ Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ я ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π½Π° своём сайтС Π½ΠΎ Π½Π° Habre ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ вСрсия.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com