Как уже сказали выше — на каждую защиту найдется возможность ее обойти. Но вот несколько вариантов:
1) Самое простое — ограничение на количество запросов с одного IP
2) При загрузке HTML странице в сессию записывайте какое-нибудь значение таймера, а при запросе json проверяйте как давно пользователь открывал страницу.
И пожалуй наиболее важный пункт
При обнаружении запросов от бота — блокируйте не все запросы, а только случайные (а лучше отдавайте левые данные) — тогда сложнее будет отследить какие изменения в алгоритме бота приводят к ошибке.