Примерный алгоритм.
Подставить в список загружаемых ресурсов
скрипт, файл стилей или картинку, которые будут с привычным расширением отдавать, но по сути являться бек-енд
скриптом, который ставит метку в сессию. При сабмите защищаемой формы, если этой метки в сессии нет, то просим запостить ещё раз - мало ли сессия протухла из-за долгого набора формы. Но, в итоге, не разрешать постинг, когда не появится метка. Главное не переусердствовать и не использовать в названии ресурса что-то, что может блочиться плагинами типа adblock. Для большей непробиваемости, лучше
скриптом всё же отдавать легитимный ресурс, а не пустой ответ.
Не забывайте, что много спама идёт через программы типа allsubmiter, а они загружают все ресурсы и ваша защита не сработает.

Ну и никто не отменял проверку данных на легистимность. У одного из
заказчиков для этого хватило составления стоп-словаря + полной уверенности, что на русскоязычном ресурсе не может быть полностью англоязычных комментов + кое-какие нюансы, которые лучше не раскрывать. Удалось победит спам, не показывая капчу нормальным посетителям.