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:
- Tranonkala noforonina amin'ny CMS WordPress
- Hosting Beget (tsy dokambarotra ity, fa ny pikantsary admin panel dia avy amin'ity mpamatsy fampiantranoana manokana ity)
- Ny tranokala WordPress dia natomboka tany amin'ny fiandohan'ny taona 2000 ary manana lahatsoratra sy fitaovana marobe
- PHP version 7.2
- WP dia manana ny kinova farany
- 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
- Araka ny Yandex. Ny tranokalan'ny Metrica dia tsidihin'ny olona 100-200 isan'andro
Voalohany indrindra, dia natao izany:
- Nodiovina tamin'ny fako miangona ny latabatra database
- 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
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
- Kajy ny adiresy IP izay manao fangatahana be dia be ao anatin'ny fotoana fohy.
- Raketo ny isan'ny hitsidika ny tranokala
- Sakanana ny fidirana amin'ny tranokala mifototra amin'ny isan'ny hitsidika
- Sakanana amin'ny alΓ lan'ny fidirana "Lava amin'ny" ao amin'ny rakitra .htaccess
- 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
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:
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