рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд "рджреБрд╖реНрдЯ" рдмреЙрдЯреНрд╕ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрдИрдкреА рджреНрд╡рд╛рд░рд╛ рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВ

рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд "рджреБрд╖реНрдЯ" рдмреЙрдЯреНрд╕ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрдИрдкреА рджреНрд╡рд╛рд░рд╛ рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВ

рд╢реБрдн рджрд┐рди! рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдирд┐рдпрдорд┐рдд рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрди рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рд╛рдЗрдЯ рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рд▓реЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд▓реЙрдХ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ "рдереЛрдбрд╝рд╛ рд╕рд╛" PHP рдХреЛрдб, рдХреБрдЫ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реЛрдВрдЧреЗред

рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛:

  1. рд╕реАрдПрдордПрд╕ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдкрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмрдирд╛рдИ рдЧрдИ
  2. рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдмреЗрдЧреЗрдЯ (рдпрд╣ рдХреЛрдИ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдбрдорд┐рди рдкреИрдирд▓ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╣реЛрдВрдЧреЗ)
  3. рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд╕рд╛рдЗрдЯ рдХреЛ 2000 рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓реЗрдЦ рдФрд░ рд╕рд╛рдордЧреНрд░рд┐рдпрд╛рдВ рд╣реИрдВ
  4. рдкреАрдПрдЪрдкреА рд╕рдВрд╕реНрдХрд░рдг 7.2
  5. WP рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИ
  6. рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╕рдордп рд╕реЗ, рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рд╛рдЗрдЯ рдиреЗ MySQL рдкрд░ рдЙрдЪреНрдЪ рд▓реЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рд╣рд░ рджрд┐рди рдпрд╣ рдорд╛рди рдкреНрд░рддрд┐ рдЦрд╛рддрд╛ рдорд╛рдирдХ рдХреЗ 120% рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдпрд╛
  7. рдпрд╛рдВрдбреЗрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░. рдореЗрдЯреНрд░рд┐рдХрд╛ рд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рддрд┐рджрд┐рди 100-200 рд▓реЛрдЧ рдЖрддреЗ рд╣реИрдВ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХрд┐рдпрд╛ рдЧрдпрд╛:

  1. рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рдВрдЪрд┐рдд рдХрдЪрд░реЗ рд╕реЗ рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛
  2. рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдП рдЧрдП, рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдХреЗ рдЕрдиреБрднрд╛рдЧ рд╣рдЯрд╛ рджрд┐рдП рдЧрдП

рд╕рд╛рде рд╣реА, рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреИрд╢рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдкреЛрдВ (рдХреИрд╢рд┐рдВрдЧ рдкреНрд▓рдЧрдЗрдиреНрд╕) рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ, рдЕрд╡рд▓реЛрдХрди рдХрд┐рдП рдЧрдП - рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рдЗрдЯ рд╕реЗ 120% рдХрд╛ рд▓реЛрдб рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдерд╛ рдФрд░ рдХреЗрд╡рд▓ рдмрдврд╝ рд╕рдХрддрд╛ рдерд╛ред

рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдЕрдиреБрдорд╛рдирд┐рдд рд▓реЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рдерд╛

рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд "рджреБрд╖реНрдЯ" рдмреЙрдЯреНрд╕ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрдИрдкреА рджреНрд╡рд╛рд░рд╛ рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВ
рд╢реАрд░реНрд╖ рдкрд░ рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рд╕рд╛рдЗрдЯ рд╣реИ, рдареАрдХ рдиреАрдЪреЗ рдЕрдиреНрдп рд╕рд╛рдЗрдЯреЗрдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╕реЗрдореА рд╕рдорд╛рди рд╣реИ рдФрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЛрдб рдХрдо рд╣реИред

рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

  • рдбреЗрдЯрд╛ рдХреИрд╢рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдП рдЧрдП, рдХрдИ рд╣рдлреНрддреЛрдВ рддрдХ рдЕрд╡рд▓реЛрдХрди рдХрд┐рдП рдЧрдП (рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рджреМрд░рд╛рди рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдиреЗ рдореБрдЭреЗ рдХрднреА рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдХрд┐ рдореИрдВ рдЗрддрдирд╛ рдмреБрд░рд╛ рдерд╛ рдФрд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛)
  • рдзреАрдореЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдЦреЛрдЬ рд╣реБрдИ, рдлрд┐рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛
  • рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд AWStats рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (рд╡реИрд╕реЗ, рдЗрд╕рдиреЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рд╡реЙрд▓реНрдпреВрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдЖрдИрдкреА рдкрддреЗ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреА)
  • рдореАрдЯреНрд░рд┐рдХ - рдореАрдЯреНрд░рд┐рдХ рдХреЗрд╡рд▓ рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдмреЙрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ
  • WP рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╕реНрдерд╛рди рдХреЗ рджреЗрд╢ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднреА рдЖрдЧрдВрддреБрдХреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдмреНрд▓реЙрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
  • "рд╣рдо рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рдЕрдзреАрди рд╣реИрдВ" рдиреЛрдЯ рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрдЯ рдХреЛ рдПрдХ рджрд┐рди рдХреЗ рд▓рд┐рдП рдмрдВрдж рдХрд░рдирд╛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд░рд╛рдВрддрд┐рдХрд╛рд░реА рддрд░реАрдХрд╛ рдирд┐рдХрд▓рд╛ - рдпрд╣ рднреА рдкреНрд░рд╕рд┐рджреНрдз рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдб рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╢реВрдиреНрдп рдорд╛рди рддрдХ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ WP рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рд╣реБрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЕрдкрдиреА рдЧрддрд┐рд╡рд┐рдзрд┐ рддрдм рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдХреЛрдИ "рд╣реБрдХ" рд╣реЛрддрд╛ рд╣реИ, рдФрд░ "рд╣реБрдХ" рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ

рд╡рд┐рдЪрд╛рд░

  1. рдЙрди рдЖрдИрдкреА рдкрддреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдЬреЛ рдХрдо рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред
  2. рд╕рд╛рдЗрдЯ рдкрд░ рд╣рд┐рдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВ
  3. рд╣рд┐рдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╛рдЗрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВ
  4. .htaccess рдлрд╝рд╛рдЗрд▓ рдореЗрдВ "рдЗрд╕рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░реЗрдВ" рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд▓реЙрдХ рдХрд░реЗрдВ
  5. рдореИрдВрдиреЗ Nginx рдХреЗ рд▓рд┐рдП iptables рдФрд░ рдирд┐рдпрдореЛрдВ рдЬреИрд╕реЗ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдБ

рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдмрд┐рдирд╛...

  • рдбреЗрдЯрд╛ рд╕рдВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛рдПрдБ рдмрдирд╛рдирд╛
    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;
    
  • рдЪрд▓рд┐рдП рдПрдХ рдлрд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХреЛрдб рдбрд╛рд▓реЗрдВрдЧреЗред рдХреЛрдб рдмреНрд▓реЙрдХрд┐рдВрдЧ рдЙрдореНрдореАрджрд╡рд╛рд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдЧрд╛ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрддрд┐рд╣рд╛рд╕ рд░рдЦреЗрдЧрд╛ред

    рдЖрдИрдкреА тАЛтАЛрдкрддреЗ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛрдб

    <?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);
    
    

    рдХреЛрдб рдХрд╛ рд╕рд╛рд░ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХрд╛ рдЖрдИрдкреА рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЙрд╕реЗ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реИред рдпрджрд┐ рдЖрдИрдкреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣реИ, рддреЛ рд╕реАрдПрдирдЯреА рдлрд╝реАрд▓реНрдб рдмрдврд╝рд╛ рджреА рдЬрд╛рдПрдЧреА (рд╕рд╛рдЗрдЯ рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛)

  • рдЕрдм рдбрд░рд╛рд╡рдиреА рдмрд╛рдд... рдЕрдм рд╡реЗ рдореБрдЭреЗ рдореЗрд░реЗ рдХреГрддреНрдп рдХреЗ рд▓рд┐рдП рдЬрд▓рд╛ рджреЗрдВрдЧреЗ :)
    рд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛрдб рдХреЛ рдореБрдЦреНрдп рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдлрд╝рд╛рдЗрд▓ - wp-load.php рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рдБ, рд╣рдо рдХрд░реНрдиреЗрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рдареАрдХ рдЙрд╕рдХреЗ рдмрд╛рдж рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ $wpdb рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реЛрддрд╛ рд╣реИ

рддреЛ, рдЕрдм рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдпрд╣ рдпрд╛ рд╡рд╣ рдЖрдИрдкреА рдкрддрд╛ рдХрд┐рддрдиреА рдмрд╛рд░ рдЕрдВрдХрд┐рдд рд╣реИ рдФрд░ рддрд╕реНрд╡реАрд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдлреА рдХреЗ рдПрдХ рдордЧ рдХреЗ рд╕рд╛рде рд╣рдо рд╣рд░ 5 рдорд┐рдирдЯ рдореЗрдВ рдПрдХ рдмрд╛рд░ рд╡рд╣рд╛рдВ рджреЗрдЦрддреЗ рд╣реИрдВ

рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд "рджреБрд╖реНрдЯ" рдмреЙрдЯреНрд╕ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрдИрдкреА рджреНрд╡рд╛рд░рд╛ рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВ

рдлрд┐рд░ рдмрд╕ "рд╣рд╛рдирд┐рдХрд╛рд░рдХ" рдЖрдИрдкреА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ, .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 - рд╕рд╛рдЗрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рд▓реЛрдб рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдЗрд╕ рддрд░рд╣ рд╣рд╛рде рд╕реЗ рдХреЙрдкреА рдХрд░рдирд╛ рдХреЛрдИ рдмрд╣реБрдд рдиреЗрдХ рдХрд╛рдо рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдб рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрд╡рд╛рдпрддреНрдд рд╣реЛрдирд╛ рдерд╛

рдЖрдЗрдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕реЗ рд╣рд░ 30 рдорд┐рдирдЯ рдореЗрдВ CRON рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

рдлрд╝рд╛рдЗрд▓ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ .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 рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдирд┐рдпрдо рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реИред
# рдкреНрд░рд╛рд░рдВрдн_рдСрдЯреЛ_рдЕрд╕реНрд╡реАрдХрд╛рд░_рд╕реВрдЪреА рдФрд░ # рдЕрдВрдд_рд╕реНрд╡рддрдГ_рдЕрд╕реНрд╡реАрдХрд╛рд░_рд╕реВрдЪреА

рдЕрдм "рд╣рд╛рдирд┐рдХрд╛рд░рдХ" рдЖрдИрдкреА рдЕрдкрдиреЗ рдЖрдк рдмреНрд▓реЙрдХ рд╣реЛ рдЧрдП рд╣реИрдВ, рдФрд░ .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

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЗрд╕ рдХреЛрдб рдХреЗ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреИрдирд▓ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд "рджреБрд╖реНрдЯ" рдмреЙрдЯреНрд╕ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрдИрдкреА рджреНрд╡рд╛рд░рд╛ рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВ

рдкреБрдирд╢реНрдЪ: рд╕рд╛рдордЧреНрд░реА рд▓реЗрдЦрдХ рдХреА рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдХреБрдЫ рд╣рд┐рд╕реНрд╕рд╛ рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╣реЗрдмрд░ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓рд╛ред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ