feat: rate-limit good bots via object cache, add curl/ClaudeBot tiers, whitelist cache warmer

This commit is contained in:
Charlie Root
2026-07-06 09:44:41 +02:00
parent 1b9504e5f9
commit 714064b7c7
4 changed files with 11 additions and 7 deletions
+1 -3
View File
@@ -10,7 +10,6 @@ firefox/19.0
firefox/38.0
firefox/18.0
wget
curl
libwww-perl
WinHttp
okhttp
@@ -229,7 +228,6 @@ Xaldon
Zeus
ZmEu
Zyborg
crawle
igdeSpyder
Robot
Aport
@@ -373,7 +371,7 @@ PolycomVVX
^The Knowledge AI
SputnikBot
od-database-crawler
Hype%20Machine
HypeMachine
The Hype Machine Engine
Apache-HttpClient
Goodzer
+3 -1
View File
@@ -20,4 +20,6 @@ SemrushBot|10
DotBot|20
PetalBot|20
Bytespider|20
GPTBot|0
GPTBot|50
curl|10
ClaudeBot|50
+4
View File
@@ -12,3 +12,7 @@
# ua:MyMonitoringTool
#
# Lines starting with # are comments. Blank lines are ignored.
ua:rss-parser
ua:ZelistBot
ua:SimplePie
ua:SI-CacheWarmer
+3 -3
View File
@@ -119,10 +119,10 @@ class ITK_Bot_Blocker {
return;
}
// Sliding window: track hits per bot per minute using transients.
// Sliding window: track hits per bot per minute using object cache (no DB writes).
$window = (int)(time() / 60); // 1-minute window
$tk_key = 'itk_rl_' . md5($name) . '_' . $window;
$count = (int)get_transient($tk_key);
$count = (int)wp_cache_get($tk_key, 'itk_rl');
if ($count >= $limit) {
// Over the limit log and send 429.
@@ -147,7 +147,7 @@ class ITK_Bot_Blocker {
}
// Under the limit increment counter and allow through.
set_transient($tk_key, $count + 1, 120);
wp_cache_set($tk_key, $count + 1, 'itk_rl', 120);
}
/* ── Blocking ─────────────────────────────────────────────── */