Kajy ny bots "ratsy" mety ho azo ary sakanana amin'ny IP

Kajy ny bots "ratsy" mety ho azo ary sakanana amin'ny IP

Andro tsara! Ao amin'ny lahatsoratra dia holazaiko aminao ny fomba ahafahan'ny mpampiasa fampiantranoana mahazatra mahazo adiresy IP izay miteraka entana be loatra amin'ny tranokala ary avy eo manakana azy ireo amin'ny fampiasana fitaovana fampiantranoana, dia hisy "kely" amin'ny code php, sary vitsivitsy.

angona fidirana:

  1. Tranonkala noforonina amin'ny CMS WordPress
  2. Hosting Beget (tsy dokambarotra ity, fa ny pikantsary admin panel dia avy amin'ity mpamatsy fampiantranoana manokana ity)
  3. Ny tranokala WordPress dia natomboka tany amin'ny fiandohan'ny taona 2000 ary manana lahatsoratra sy fitaovana marobe
  4. PHP version 7.2
  5. WP dia manana ny kinova farany
  6. Nandritra ny fotoana kelikely, nanomboka namoaka entana be tao amin'ny MySQL araka ny angon-drakitra fampiantranoana ny tranokala. Isan'andro dia nihoatra ny 120% ny sanda isaky ny kaonty
  7. Araka ny Yandex. Ny tranokalan'ny Metrica dia tsidihin'ny olona 100-200 isan'andro

Voalohany indrindra, dia natao izany:

  1. Nodiovina tamin'ny fako miangona ny latabatra database
  2. Ny plugins tsy ilaina dia nesorina, nesorina ny ampahany amin'ny code efa lany andro

Amin'izay fotoana izay ihany koa dia tiako ny hisarika ny sainao ho amin'ny zava-misy fa nosedraina ny safidy caching (plugins caching), natao ny fandinihana - fa ny enta-mavesatra 120% avy amin'ny tranokala iray dia tsy niova ary mety hitombo ihany.

Tahaka ny ahoana ny enta-mavesatra eo amin'ny angon-drakitra fampiantranoana

Kajy ny bots "ratsy" mety ho azo ary sakanana amin'ny IP
Eo an-tampony ny tranokala resahina, eto ambany dia misy tranokala hafa mitovy cms ary mitovy amin'ny fifamoivoizana, saingy miteraka entana kely kokoa.

fanadihadiana ny

  • Andrana maro no natao tamin'ny safidy caching data, ny fandinihana natao nandritra ny herinandro maromaro (soa fa tamin'io fotoana io dia tsy nanoratra tamiko ny fampiantranoana fa ratsy be aho ary ho tapaka)
  • Nisy ny famakafakana sy fitadiavana fanontaniana miadana, avy eo dia niova kely ny firafitry ny database sy ny karazana latabatra
  • Ho an'ny famakafakana dia nampiasa ny AWStats naorina izahay (raha ny marina, nanampy tamin'ny kajy ny adiresy IP ratsy indrindra mifototra amin'ny habetsahan'ny fifamoivoizana.
  • Metric - ny metric dia manome fampahalalana momba ny olona ihany fa tsy momba ny bots
  • Nisy ny fikasana hampiasa plugins ho an'ny WP izay afaka manivana sy manakana ny mpitsidika na dia amin'ny firenena misy azy sy ny fitambarana isan-karazany aza
  • Ny fomba radika tanteraka dia ny fanakatonana ny tranokala mandritra ny iray andro miaraka amin'ny fanamarihana hoe "Eo ambany fikojakojana izahay" - izany koa dia natao tamin'ny fampiasana ny plugin malaza. Amin'ity tranga ity, manantena izahay fa hidina ny enta-mavesatra, fa tsy amin'ny soatoavina aotra, satria ny ideolojia WP dia mifototra amin'ny hooks ary ny plugins dia manomboka ny asany rehefa misy "hook", ary alohan'ny hitrangan'ny "hook", ny fangatahana amin'ny angon-drakitra dia afaka. efa natao

hevitra

  1. Kajy ny adiresy IP izay manao fangatahana be dia be ao anatin'ny fotoana fohy.
  2. Raketo ny isan'ny hitsidika ny tranokala
  3. Sakanana ny fidirana amin'ny tranokala mifototra amin'ny isan'ny hitsidika
  4. Sakanana amin'ny alΓ lan'ny fidirana "Lava amin'ny" ao amin'ny rakitra .htaccess
  5. Tsy nieritreritra safidy hafa aho, toy ny iptables sy fitsipika ho an'ny Nginx, satria manoratra momba ny fampiantranoana aho

Nisy hevitra nipoitra, ka mila ampiharina, satria tsy misy an’ity...

  • Mamorona tabilao hanangonana angona
    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;
    
  • Andao hamorona rakitra iray hametrahana ny code. Ny kaody dia horaketina ao amin'ny latabatra mpilatsaka hofidina ary hitazona tantara ho an'ny debugging.

    Kaody rakitra ho an'ny firaketana adiresy 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);
    
    

    Ny fototry ny kaody dia ny mahazo ny adiresy IP an'ny mpitsidika ary manoratra izany ao anaty latabatra. Raha efa eo amin'ny latabatra ny ip dia hitombo ny saha cnt (ny isan'ny fangatahana amin'ny tranokala)

  • Izao ny zavatra mampatahotra... Ankehitriny dia handoro ahy izy ireo noho ny zavatra nataoko :)
    Mba handrakitra ny fangatahana tsirairay amin'ny tranokala dia mampifandray ny code code amin'ny rakitra WordPress lehibe - wp-load.php. Eny, manova ny rakitra kernel izahay ary aorian'ny fisian'ny $ wpdb manerantany

Noho izany, ankehitriny isika dia afaka mahita hoe impiry ity na io adiresy IP io no voamarika eo amin'ny latabatray ary miaraka amin'ny kaopy kafe dia mijery ao indray mandeha isaky ny 5 minitra izahay mba hahatakatra ny sary

Kajy ny bots "ratsy" mety ho azo ary sakanana amin'ny IP

Adikao tsotra izao ny IP "manimba", sokafy ny rakitra .htaccess ary ampio amin'ny faran'ny rakitra

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

Izany no izy, ankehitriny 94.242.55.248 - tsy manana fidirana amin'ny tranokala ary tsy miteraka entana amin'ny angon-drakitra

Saingy isaky ny manao kopia amin'ny tanana tahaka izao dia tsy asa tena marina, ary ankoatra izany, ny fehezan-dalΓ na dia natao ho an'ny tenany manokana.

Andao hanampy rakitra iray izay hotanterahina amin'ny CRON isaky ny 30 minitra:

Kaody fisie manova .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)));

Tsotra sy primitive ny kaody rakitra ary ny hevi-dehibe dia ny maka kandidΓ  amin'ny fanakanana sy ny fampidirana ny fitsipika fanakanana ao amin'ny rakitra .htaccess eo anelanelan'ny fanehoan-kevitra.
# start_auto_deny_list ary # end_auto_deny_list

Ankehitriny dia voasakana irery ny IP "manimba", ary toa izao ny rakitra .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

Vokatr'izany, rehefa manomboka miasa ity code ity dia azonao jerena ao amin'ny tontonana fampiantranoana ny valiny:

Kajy ny bots "ratsy" mety ho azo ary sakanana amin'ny IP

PS: Ny fitaovana dia an'ny mpanoratra, na dia namoaka ampahany tamin'izany tao amin'ny tranokalako aza aho, dia nahazo dikan-teny miitatra kokoa amin'ny Habre aho.

Source: www.habr.com

Add a comment