Isu tinoona inogona "yakaipa" bots uye inovavharira neIP

Isu tinoona inogona "yakaipa" bots uye inovavharira neIP

Zuva rakanaka! Muchinyorwa ini ndichakuudza kuti vashandisi venguva dzose kutambira vanogona sei kubata IP kero dzinoburitsa yakawandisa mutoro pasaiti uye vobva vadzivharira vachishandisa maturusi ekutambira, pachave ne "zvishoma" zvephp kodhi, mashoma skrini.

Zvekuisa data:

  1. Webhusaiti yakagadzirwa paCMS WordPress
  2. Hosting Beget (ichi hachisi chiziviso, asi admin panhizha zvidzitiro zvichabva kune uyu anotambira mupi)
  3. Iyo WordPress saiti yakatangwa pane imwe nzvimbo mukutanga kwe2000 uye ine nhamba huru yezvinyorwa uye zvinhu
  4. PHP shanduro 7.2
  5. WP ine yazvino vhezheni
  6. Kwenguva yakati ikozvino, saiti yakatanga kuburitsa mutoro wakakwira paMySQL maererano nedata rekutambira. Zuva rega rega kukosha uku kwakapfuura 120% yezvakajairwa paakaundi
  7. Maererano neYandex. Metrica saiti inoshanyirwa nevanhu 100-200 pazuva

Chokutanga pane zvose, izvi zvakaitwa:

  1. Database tables dzakabviswa marara akaunganidzwa
  2. Mapulagi asina kufanira akavharwa, zvikamu zvekodhi yekare zvakabviswa

Panguva imwecheteyo, ndinoda kukwevera pfungwa dzako kune chokwadi chekuti caching sarudzo (caching plugins) dzakaedzwa, zvakacherechedzwa - asi mutoro we120% kubva kune imwe saiti hauna kuchinjwa uye unogona kukura chete.

Izvo zvakaenzana mutoro pane yekutambira dhatabhesi yakaita sei

Isu tinoona inogona "yakaipa" bots uye inovavharira neIP
Pamusoro pane saiti iri mubvunzo, pazasi pane mamwe masayiti ane macms akafanana uye anenge traffic yakafanana, asi gadzira mashoma.

Analysis

  • Kuedza kwakawanda kwakaitwa nesarudzo dze caching data, kucherechedzwa kwakaitwa kwemavhiki akati wandei (nerombo rakanaka, panguva ino yekutambira haina kumbondinyorera kuti ndakaipa uye ndaizobviswa)
  • Paive nekuongorora uye kutsvaga kunonoka kubvunza, ipapo iyo dhatabhesi chimiro uye tafura mhando yakashandurwa zvishoma
  • Kuongorora, isu takanyanya kushandisa yakavakirwa-mukati maAWStats (nenzira, yakabatsira kuverenga yakaipisisa IP kero zvichienderana nehuwandu hwetraffic.
  • Metric - iyo metric inopa ruzivo chete nezve vanhu, kwete nezve bots
  • Pave nekuedza kushandisa plugins yeWP inogona kusefa nekuvhara vashanyi kunyangwe nenyika yenzvimbo uye akasiyana masanganiswa.
  • Nzira yakakwana yakave yekuvhara saiti kwezuva neinoti "Tiri pasi pekugadzirisa" - izvi zvakaitwa zvakare uchishandisa yakakurumbira plugin. Muchiitiko ichi, tinotarisira kuti mutoro unodonha, asi kwete kune zero kukosha, sezvo pfungwa yeWP yakavakirwa pazvikorekedzo uye mapulagini anotanga basa ravo apo "hook" inoitika, uye "hook" isati yaitika, zvikumbiro kune database zvinogona. kare kugadzirwa

Idea

  1. Verenga kero dzeIP dzinoita zvikumbiro zvakawanda munguva pfupi.
  2. Rekodha huwandu hwemahits kune saiti
  3. Vhara kupinda kune saiti zvichienderana nehuwandu hwekurova
  4. Bvisa kushandisa "Ramba kubva" kupinda mu .htaccess file
  5. Ini handina kufunga nezve dzimwe sarudzo, senge iptables nemitemo yeNginx, nekuti ndiri kunyora nezve kugamuchira

Imwe pfungwa yabuda, saka inoda kuitwa, sezvo pasina izvi...

  • Kugadzira matafura kuti uunganidze data
    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;
    
  • Ngatigadzire faira yatinozoisa kodhi. Iyo kodhi icharekodha mune inovharira mumiriri matafura uye chengeta nhoroondo yedebugging.

    Faira kodhi yekurekodha IP kero

    <?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);
    
    

    Chinokosha chekodhi kutora kero yeIP yemuenzi uye kuinyora mutafura. Kana iyo ip yatove mutafura, iyo cnt munda ichawedzerwa (nhamba yezvikumbiro kune saiti)

  • Zvino chinhu chinotyisa ... Zvino vachandipisa nekuda kwezviito zvangu :)
    Kurekodha chikumbiro chega chega kune saiti, tinobatanidza kodhi yefaira kune huru WordPress faira - wp-load.php. Ehe, isu tinoshandura iyo kernel faira uye chaizvo mushure mekusiyana kwepasi rose $ wpdb kwatovepo

Saka, ikozvino isu tinogona kuona kuti kangani iyi kana iyo IP kero yakanyorwa mutafura yedu uye nekagi yekofi tinotarisa ipapo kamwechete maminitsi mashanu kuti tinzwisise mufananidzo.

Isu tinoona inogona "yakaipa" bots uye inovavharira neIP

Wobva wangokopa IP "inokuvadza", vhura iyo .htaccess file uye uiwedzere kumagumo efaira.

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

Ndizvozvo, ikozvino 94.242.55.248 - haina mukana kune saiti uye haiburitse mutoro pane database.

Asi nguva dzese kukopa nemaoko seizvi harisi basa rakarurama, uye kunze kweizvozvo, kodhi yacho yaiitirwa kuzvimiririra.

Ngatiwedzerei faira rinozoitwa kuburikidza neCRON ega ega makumi matatu maminetsi:

File code modifying .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)));

Iyo kodhi yefaira iri nyore uye yekare uye pfungwa yayo huru ndeyekutora vavhoti vekuvhara uye kuisa inovharira mitemo mu.htaccess faira pakati pemashoko.
# start_auto_deny_list uye # end_auto_deny_list

Iye zvino "zvinokuvadza" IPs zvakavharwa pachavo, uye .htaccess file inotarisa chimwe chinhu chakadai:

# 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

Nekuda kweizvozvo, mushure mekuti kodhi iyi yatanga kushanda, unogona kuona mhedzisiro mupaneri yekutambira:

Isu tinoona inogona "yakaipa" bots uye inovavharira neIP

PS: Zvinyorwa ndezvemunyori, kunyangwe ndakaburitsa chikamu pawebhusaiti yangu, ndakawana imwe yakawedzera vhezheni paHabre.

Source: www.habr.com

Voeg