Вы ведь понимаете, что если бот нацелен конкретно на ваш сайт, здесь никакая защита не поможет.
Если общий случай, можно придумать какой-то алгоритм на js, браузер его исполняет и отправляет результат, на стороне сервера аналогичный алгоритм, и просто сверяем.
Но нужно учесть, что мы теряем пользователей с откл. js