Вы можете добавить отрицательную капчу:
Отрицательная капча имеет ту же цель, что и обычная капча изображения: чтобы боты не отправляли формы. Имиджевые («положительные») капчи делают это, выполняя шаг, который могут сделать только люди, но боты не могут: читать перемешанные символы из изображения. Но это плохо. Это создает проблемы с юзабилити, ухудшает показатели конверсии и сбивает с толку многих людей. Почему бы не сделать это наоборот? Отрицательные капчи создают форму, в которой есть задачи, которые могут выполнять только боты, а люди - нет. Это имеет точно такой же эффект, с (анекдотически) гораздо более низким уровнем ложноположительной идентификации по сравнению с положительными капчами. Все это происходит, не заставляя людей проходить лишние хлопоты, чтобы отправить форму. Это действительно беспроигрышный. [источник] .
В вашем случае вам лучше всего использовать Honeypot: добавьте новое поле:
<div style="position: absolute; left: -2000px;"><input type="text" name="surname" value="" /></div>
Это предполагает, что вы не заинтересованы в получении фамилии. Если людям удастся заполнить это поле и отправить его, они, скорее всего, будут ботом: обычные браузеры не будут показывать поле: обычные пользователи не увидят его и, следовательно, не заполнят его.
Теперь в вашем CGI-скрипте просто отфильтруйте "фамилию"; если установлено, остановите обработку и выдайте ошибку, или просто оставьте это при этом.
Или, если это невозможно, попробуйте отфильтровать результаты опубликованных форм по «если в записи не установлена фамилия». Скажем, если вы получите результаты в Excel / CSV: просто используйте Excel, чтобы отфильтровать элементы с фамилией. Или используйте ваши почтовые фильтры, чтобы переместить любую почту, для которой фамилия: .... имеет значение, в специальный каталог.