Timazindikira ma bots "oyipa" ndikuwaletsa ndi IP

Timazindikira ma bots "oyipa" ndikuwaletsa ndi IP

Tsiku labwino! M'nkhaniyi ndikuwuzani momwe ogwiritsa ntchito nthawi zonse amatha kugwira ma adilesi a IP omwe amatulutsa katundu wambiri patsambalo ndikuletsa kugwiritsa ntchito zida zochitira, padzakhala "pang'ono" ya php code, zithunzi zochepa.

Zolowetsa:

  1. Webusayiti idapangidwa pa CMS WordPress
  2. Hosting Beget (ichi sichotsatsa, koma zowonera pagulu la admin zitha kuchokera kwa omwe akuchititsa)
  3. Tsamba la WordPress lidakhazikitsidwa kwinakwake koyambirira kwa 2000 ndipo lili ndi zolemba ndi zida zambiri
  4. PHP mtundu 7.2
  5. WP ili ndi mtundu waposachedwa
  6. Kwa kanthawi tsopano, malowa adayamba kupanga katundu wambiri pa MySQL malinga ndi deta yosungira. Tsiku lililonse mtengo uwu udaposa 120% ya zomwe zinali pa akaunti
  7. Malinga ndi Yandex. Malo a Metrica amayendera anthu 100-200 patsiku

Choyamba, izi zidachitika:

  1. Matebulo a database adachotsedwa zinyalala zomwe zidasokonekera
  2. Mapulagini osafunikira adazimitsidwa, zigawo zamakhodi akale zidachotsedwa

Panthawi imodzimodziyo, ndikufuna ndikuwonetseni kuti zosankha za caching (caching plugins) zinayesedwa, ziwonetsero zinapangidwa - koma katundu wa 120% kuchokera ku malo amodzi sanasinthe ndipo akhoza kukula.

Momwe kuchuluka kwachulukidwe pazosungidwa zosungirako kumawoneka

Timazindikira ma bots "oyipa" ndikuwaletsa ndi IP
Pamwambapa pali tsamba lomwe likufunsidwa, pansipa pali masamba ena omwe ali ndi ma cms ofanana komanso pafupifupi magalimoto omwewo, koma pangani katundu wochepa.

Kufufuza

  • Zoyeserera zambiri zidapangidwa ndi zosankha za caching data, zowonera zidachitika kwa milungu ingapo (mwamwayi, panthawiyi wolandirayo sanandilembepo kuti ndine woyipa kwambiri ndipo sindilumikizidwa)
  • Panali kusanthula ndi kufufuza kwa mafunso pang'onopang'ono, ndiye mawonekedwe a database ndi mtundu wa tebulo adasinthidwa pang'ono
  • Kuti tiwunike, tidagwiritsa ntchito ma AWStats omangidwa (mwa njira, idathandizira kuwerengera adilesi yoyipa kwambiri ya IP potengera kuchuluka kwa magalimoto.
  • Metric - metric imapereka zambiri za anthu, osati za bots
  • Pakhala kuyesa kugwiritsa ntchito mapulagini a WP omwe amatha kusefa ndi kuletsa alendo ngakhale ndi dziko lomwe akukhala komanso kuphatikiza kosiyanasiyana.
  • Njira yotsimikizika kwambiri idakhala yotseka malowa kwa tsiku limodzi ndi cholemba "Tikukonza" - izi zidachitikanso pogwiritsa ntchito pulogalamu yowonjezera yotchuka. Pankhaniyi, tikuyembekeza kuti katunduyo agwere, koma osati ku ziro zero, popeza malingaliro a WP amachokera ku ndowe ndi mapulagini amayamba ntchito yawo pamene "mbedza" ikuchitika, ndipo "mbeza" isanachitike, zopempha ku database zingatheke. zapangidwa kale

Maganizo

  1. Werengani ma adilesi a IP omwe amapempha zambiri pakanthawi kochepa.
  2. Lembani kuchuluka kwa zomenyedwa patsamba
  3. Letsani mwayi wopita kutsambali potengera kuchuluka kwa kumenyedwa
  4. Letsani kugwiritsa ntchito "Kukana kuchokera" kulowa mu fayilo ya .htaccess
  5. Sindinaganizire zosankha zina, monga iptables ndi malamulo a Nginx, chifukwa ndikulemba za kuchititsa

Lingaliro lawonekera, kotero liyenera kukhazikitsidwa, monga popanda izi ...

  • Kupanga matebulo kuti muwunjike deta
    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;
    
  • Tiyeni tipange fayilo momwe tidzayikamo code. Khodiyo idzalemba m'matebulo otsekereza ndikusunga mbiri yakusintha.

    Nambala yafayilo yojambulira ma adilesi a 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);
    
    

    Chofunikira cha code ndikutenga adilesi ya IP ya mlendo ndikulemba patebulo. Ngati ip ili kale patebulo, gawo la cnt lidzawonjezedwa (chiwerengero cha zopempha patsambalo)

  • Tsopano chinthu chowopsa ... Tsopano andiwotcha chifukwa cha zochita zanga :)
    Kuti tilembe pempho lililonse patsambali, timalumikiza fayilo ya fayilo ku fayilo yayikulu ya WordPress - wp-load.php. Inde, timasintha fayilo ya kernel ndipo ndendende kusintha kwapadziko lonse $wpdb kulipo kale

Chifukwa chake, tsopano titha kuwona kuti izi kapena adilesi ya IP yalembedwa kangati patebulo lathu ndipo ndi kapu ya khofi timayang'ana pamenepo kamodzi mphindi 5 zilizonse kuti timvetsetse chithunzicho.

Timazindikira ma bots "oyipa" ndikuwaletsa ndi IP

Kenako ingotengerani "zoyipa" IP, tsegulani fayilo ya .htaccess ndikuwonjezera kumapeto kwa fayilo.

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

Ndizo zomwe, tsopano 94.242.55.248 - alibe mwayi wopita kutsambali ndipo samapanga katundu pa database.

Koma nthawi zonse kukopera ndi dzanja monga chonchi si ntchito yolungama kwambiri, ndipo pambali pake, codeyo idapangidwa kuti ikhale yodziyimira payokha.

Tiyeni tiwonjezere fayilo yomwe idzaperekedwa kudzera pa CRON mphindi 30 zilizonse:

Fayilo yosintha .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)));

Fayilo yafayilo ndiyosavuta komanso yakale ndipo lingaliro lake lalikulu ndikutenga ofuna kutsekereza ndikulowetsa malamulo oletsa mu fayilo ya .htaccess pakati pa ndemanga.
# start_auto_deny_list ndi # end_auto_deny_list

Tsopano ma IP "ovulaza" atsekedwa okha, ndipo fayilo ya .htaccess ikuwoneka motere:

# 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

Zotsatira zake, code ikayamba kugwira ntchito, mutha kuwona zotsatira zake pagulu lochitira:

Timazindikira ma bots "oyipa" ndikuwaletsa ndi IP

PS: Nkhaniyi ndi ya wolemba, ngakhale ndidasindikiza gawo lake patsamba langa, ndili ndi mtundu wokulirapo pa Habre.

Source: www.habr.com

Kuwonjezera ndemanga