НиС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΈ β€žΠ·Π»ΠΈβ€ Π±ΠΎΡ‚ΠΎΠ²Π΅ ΠΈ Π³ΠΈ Π±Π»ΠΎΠΊΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎ IP

НиС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΈ β€žΠ·Π»ΠΈβ€ Π±ΠΎΡ‚ΠΎΠ²Π΅ ΠΈ Π³ΠΈ Π±Π»ΠΎΠΊΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎ IP

Π”ΠΎΠ±ΡŠΡ€ Π΄Π΅Π½! Π’ статията Ρ‰Π΅ Π²ΠΈ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ хостинг ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° уловят IP адрСси, ΠΊΠΎΠΈΡ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ ΠΏΡ€Π΅ΠΊΠΎΠΌΠ΅Ρ€Π½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° сайта ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° Π³ΠΈ Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° хостинг инструмСнти, Ρ‰Π΅ ΠΈΠΌΠ° β€žΠΌΠ°Π»ΠΊΠΎβ€œ php ΠΊΠΎΠ΄, няколко Π΅ΠΊΡ€Π°Π½Π½ΠΈ снимки.

Π’Ρ…ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ:

  1. УСбсайт, създадСн Π½Π° CMS WordPress
  2. Hosting Beget (Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ°, Π½ΠΎ Π΅ΠΊΡ€Π°Π½Π½ΠΈΡ‚Π΅ снимки Π½Π° Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π° Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ хостинг доставчик)
  3. Π‘Π°ΠΉΡ‚ΡŠΡ‚ WordPress стартира някъдС Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° 2000 Π³. ΠΈ ΠΈΠΌΠ° голям Π±Ρ€ΠΎΠΉ статии ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ
  4. PHP вСрсия 7.2
  5. WP ΠΈΠΌΠ° Π½Π°ΠΉ-Π½ΠΎΠ²Π°Ρ‚Π° вСрсия
  6. ΠžΡ‚ извСстно Π²Ρ€Π΅ΠΌΠ΅ ΡΠ°ΠΉΡ‚ΡŠΡ‚ Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° високо Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° MySQL спорСд Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° хостинг. ВсСки Π΄Π΅Π½ Ρ‚Π°Π·ΠΈ стойност надвишава 120% ΠΎΡ‚ Π½ΠΎΡ€ΠΌΠ°Ρ‚Π° Π·Π° смСтка
  7. Π‘ΠΏΠΎΡ€Π΅Π΄ Yandex. Π‘Π°ΠΉΡ‚ΡŠΡ‚ Π½Π° Metrica сС посСщава ΠΎΡ‚ 100-200 Π΄ΡƒΡˆΠΈ Π½Π° Π΄Π΅Π½

На ΠΏΡŠΡ€Π²ΠΎ място, Ρ‚ΠΎΠ²Π° бСшС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ:

  1. Π’Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ бяха изчистСни ΠΎΡ‚ натрупания Π±ΠΎΠΊΠ»ΡƒΠΊ
  2. НСнуТнитС Π΄ΠΎΠ±Π°Π²ΠΊΠΈ бяха Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ, сСкции ΠΎΡ‚ остарял ΠΊΠΎΠ΄ бяха ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ

Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π±ΠΈΡ… искал Π΄Π° ΠΎΠ±ΡŠΡ€Π½Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ бяха ΠΈΠ·ΠΏΡ€ΠΎΠ±Π²Π°Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅ (плъгини Π·Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅), бяха Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ наблюдСния - Π½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΎΡ‚ 120% ΠΎΡ‚ Π΅Π΄ΠΈΠ½ сайт бСшС Π½Π΅ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΎ ΠΈ моТСшС само Π΄Π° растС.

Как изглСТдашС ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° хостинг Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

НиС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΈ β€žΠ·Π»ΠΈβ€ Π±ΠΎΡ‚ΠΎΠ²Π΅ ΠΈ Π³ΠΈ Π±Π»ΠΎΠΊΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎ IP
Най-ΠΎΡ‚Π³ΠΎΡ€Π΅ Π΅ Π²ΡŠΠΏΡ€ΠΎΡΠ½ΠΈΡΡ‚ сайт, ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ са Π΄Ρ€ΡƒΠ³ΠΈ сайтовС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ ΡΡŠΡ‰ΠΈΡ cms ΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ ΡΡŠΡ‰ΠΈΡ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, Π½ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅.

Анализ

  • Бяха Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠΈΡ‚ΠΈ с ΠΎΠΏΡ†ΠΈΠΈ Π·Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, наблюдСния бяха ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½ΠΈ Π² ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° няколко сСдмици (Π·Π° щастиС, ΠΏΡ€Π΅Π· Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ Ρ…ΠΎΡΡ‚ΠΈΠ½Π³ΡŠΡ‚ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΠΌΠΈ писа, Ρ‡Π΅ съм Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π·Π»Π΅ ΠΈ Ρ‰Π΅ бъдС ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚)
  • ИмашС Π°Π½Π°Π»ΠΈΠ· ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π±Π°Π²Π½ΠΈ заявки, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ структурата Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ Ρ‚ΠΈΠΏΡŠΡ‚ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° бяха Π»Π΅ΠΊΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈ
  • Π—Π° Π°Π½Π°Π»ΠΈΠ· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ ΠΏΡ€Π΅Π΄ΠΈΠΌΠ½ΠΎ Π²Π³Ρ€Π°Π΄Π΅Π½Π°Ρ‚Π° AWStats (ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, тя ΠΏΠΎΠΌΠΎΠ³Π½Π° Π΄Π° сС изчисли Π½Π°ΠΉ-Π»ΠΎΡˆΠΈΡΡ‚ IP адрСс въз основа Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°
  • ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠ° – ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°Ρ‚Π° Π΄Π°Π²Π° информация само Π·Π° Ρ…ΠΎΡ€Π°, Π½Π΅ ΠΈ Π·Π° Π±ΠΎΡ‚ΠΎΠ²Π΅
  • Има ΠΎΠΏΠΈΡ‚ΠΈ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° WP, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Ρ‚ ΠΈ Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ посСтитСли Π΄ΠΎΡ€ΠΈ ΠΏΠΎ Π΄ΡŠΡ€ΠΆΠ°Π²Π° Π½Π° мСстополоТСниС ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ
  • Напълно Ρ€Π°Π΄ΠΈΠΊΠ°Π»Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ сС ΠΎΠΊΠ°Π·Π° затварянСто Π½Π° сайта Π·Π° Π΅Π΄ΠΈΠ½ Π΄Π΅Π½ с Π±Π΅Π»Π΅ΠΆΠΊΠ°Ρ‚Π° β€žΠΠΈΠ΅ смС Π² процСс Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°β€œ - Ρ‚ΠΎΠ²Π° ΡΡŠΡ‰ΠΎ бСшС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° извСстния плъгин. Π’ Ρ‚ΠΎΠ·ΠΈ случай ΠΎΡ‡Π°ΠΊΠ²Π°ΠΌΠ΅ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π΄Π° спаднС, Π½ΠΎ Π½Π΅ Π΄ΠΎ Π½ΡƒΠ»Π΅Π²ΠΈ стойности, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ идСологията Π½Π° WP сС основава Π½Π° ΠΊΡƒΠΊΠΈΡ‡ΠΊΠΈ ΠΈ ΠΏΠ»ΡŠΠ³ΠΈΠ½ΠΈΡ‚Π΅ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ своята дСйност, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС появи β€žΠΊΡƒΠΊΠΈΡ‡ΠΊΠ°β€œ ΠΈ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° сС появи β€žΠΊΡƒΠΊΠΈΡ‡ΠΊΠ°Ρ‚Π°β€œ, заявкитС към Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π²Π΅Ρ‡Π΅ са Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ

ИдСя

  1. Π˜Π·Ρ‡ΠΈΡΠ»Π΅Ρ‚Π΅ IP адрСси, ΠΊΠΎΠΈΡ‚ΠΎ правят ΠΌΠ½ΠΎΠ³ΠΎ заявки Π·Π° ΠΊΡ€Π°Ρ‚ΡŠΠΊ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅.
  2. Π—Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ броя Π½Π° посСщСнията Π½Π° сайта
  3. Π‘Π»ΠΎΠΊΠΈΡ€Π°ΠΉΡ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ сайта въз основа Π½Π° броя посСщСния
  4. Π‘Π»ΠΎΠΊΠΈΡ€Π°ΠΉΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° записа β€žΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚β€œ във Ρ„Π°ΠΉΠ»Π° .htaccess
  5. НС обмислях Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠΏΡ†ΠΈΠΈ, ΠΊΠ°Ρ‚ΠΎ iptables ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Nginx, Π·Π°Ρ‰ΠΎΡ‚ΠΎ пиша Π·Π° хостинг

Появи сС идСя, която трябва Π΄Π° сС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π±Π΅Π· Ρ‚ΠΎΠ²Π°...

  • БъздаванС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π·Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ
    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;
    
  • НСка създадСм Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ поставим ΠΊΠΎΠ΄Π°. ΠšΠΎΠ΄ΡŠΡ‚ Ρ‰Π΅ сС записва Π² Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ с Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰ΠΈ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΈ ΠΈ Ρ‰Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° история Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ.

    Π€Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ΄ Π·Π° запис Π½Π° 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);
    
    

    Π‘ΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΊΠΎΠ΄Π° Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ IP адрСса Π½Π° посСтитСля ΠΈ Π΄Π° Π³ΠΎ запишС Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°. Ако ip Π²Π΅Ρ‡Π΅ Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, ΠΏΠΎΠ»Π΅Ρ‚ΠΎ cnt Ρ‰Π΅ бъдС ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎ (броят заявки към сайта)

  • Π‘Π΅Π³Π° ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΡ‚ΠΎ... Π‘Π΅Π³Π° Ρ‰Π΅ ΠΌΠ΅ изгорят Π·Π° дСйствията ΠΌΠΈ :)
    Π—Π° Π΄Π° записвамС всяка заявка към сайта, ΡΠ²ΡŠΡ€Π·Π²Π°ΠΌΠ΅ ΠΊΠΎΠ΄Π° Π½Π° Ρ„Π°ΠΉΠ»Π° с основния Ρ„Π°ΠΉΠ» Π½Π° WordPress – wp-load.php. Π”Π°, промСнямС Ρ„Π°ΠΉΠ»Π° Π½Π° ядрото ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ слСд ΠΊΠ°Ρ‚ΠΎ Π³Π»ΠΎΠ±Π°Π»Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° $wpdb Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°

И Ρ‚Π°ΠΊΠ°, сСга ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ»ΠΊΠΎ чСсто Ρ‚ΠΎΠ·ΠΈ ΠΈΠ»ΠΈ ΠΎΠ½Π·ΠΈ IP адрСс Π΅ отбСлязан Π² Π½Π°ΡˆΠ°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈ с Ρ‡Π°ΡˆΠ° ΠΊΠ°Ρ„Π΅ ΠΏΠΎΠ³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Ρ‚Π°ΠΌ вСднъТ Π½Π° всСки 5 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°Ρ‚Π°

НиС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΈ β€žΠ·Π»ΠΈβ€ Π±ΠΎΡ‚ΠΎΠ²Π΅ ΠΈ Π³ΠΈ Π±Π»ΠΎΠΊΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎ IP

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° просто ΠΊΠΎΠΏΠΈΡ€Π°ΠΉΡ‚Π΅ β€žΠ²Ρ€Π΅Π΄Π½ΠΈΡβ€œ IP, ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Ρ„Π°ΠΉΠ»Π° .htaccess ΠΈ Π³ΠΎ Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Π² края Π½Π° Ρ„Π°ΠΉΠ»Π°

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

Π’ΠΎΠ²Π° Π΅ всичко, сСга 94.242.55.248 - няма Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ сайта ΠΈ Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ

Но всСки ΠΏΡŠΡ‚ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€ΡŠΠΊΠ° ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π½Π° Π·Π°Π΄Π°Ρ‡Π° ΠΈ освСн Ρ‚ΠΎΠ²Π° ΠΊΠΎΠ΄ΡŠΡ‚ Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π΄Π° бъдС Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ΅Π½

НСка Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ сС изпълнява Ρ‡Ρ€Π΅Π· CRON Π½Π° всСки 30 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ:

Π€Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ΄, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‰ .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)));

ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° Ρ„Π°ΠΉΠ»Π° Π΅ доста прост ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π΅Π½ ΠΈ основната ΠΌΡƒ идСя Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΈ Π·Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ ΠΈ Π΄Π° въвСдС ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ във Ρ„Π°ΠΉΠ»Π° .htaccess ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅
# start_auto_deny_list ΠΈ # end_auto_deny_list

Π‘Π΅Π³Π° β€žΠ²Ρ€Π΅Π΄Π½ΠΈΡ‚Π΅β€œ IP адрСси сС Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ сами ΠΈ Ρ„Π°ΠΉΠ»ΡŠΡ‚ .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

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π°, слСд ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ Π·Π°ΠΏΠΎΡ‡Π½Π΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° Π² хостинг ΠΏΠ°Π½Π΅Π»Π°:

НиС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΈ β€žΠ·Π»ΠΈβ€ Π±ΠΎΡ‚ΠΎΠ²Π΅ ΠΈ Π³ΠΈ Π±Π»ΠΎΠΊΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎ IP

PS: ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΡŠΡ‚ Π΅ Π½Π° Π°Π²Ρ‚ΠΎΡ€Π°, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ… част ΠΎΡ‚ Π½Π΅Π³ΠΎ Π½Π° моя уСбсайт, ΠΈΠΌΠ°ΠΌ ΠΏΠΎ-Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π° вСрсия Π½Π° Π₯Π°Π±Ρ€Π΅.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€