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:
- Webusayiti idapangidwa pa CMS WordPress
- Hosting Beget (ichi sichotsatsa, koma zowonera pagulu la admin zitha kuchokera kwa omwe akuchititsa)
- Tsamba la WordPress lidakhazikitsidwa kwinakwake koyambirira kwa 2000 ndipo lili ndi zolemba ndi zida zambiri
- PHP mtundu 7.2
- WP ili ndi mtundu waposachedwa
- 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
- Malinga ndi Yandex. Malo a Metrica amayendera anthu 100-200 patsiku
Choyamba, izi zidachitika:
- Matebulo a database adachotsedwa zinyalala zomwe zidasokonekera
- 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
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
- Werengani ma adilesi a IP omwe amapempha zambiri pakanthawi kochepa.
- Lembani kuchuluka kwa zomenyedwa patsamba
- Letsani mwayi wopita kutsambali potengera kuchuluka kwa kumenyedwa
- Letsani kugwiritsa ntchito "Kukana kuchokera" kulowa mu fayilo ya .htaccess
- 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.
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:
PS: Nkhaniyi ndi ya wolemba, ngakhale ndidasindikiza gawo lake patsamba langa, ndili ndi mtundu wokulirapo pa Habre.
Source: www.habr.com