Для запроса формы, генерируешь уникальный ключ, хранишь копию в сессии - и кладешь в скрытое поле в форме, потом - ждешь получения этого ключа через форму, и сверяешь его с тем, который у тебя в сессии. Почти как кука, но без пользовательского ввода. В простом случае, это гарантирует, что: 1. пользователь видел форму перед отправкой (защищает от CSRF) 2. Что форма была запрошена именно с твоего сервера. Если этот токен получать (но не генерировать!) например через аякс, и заполнять в форму, то это будет гарантировать, что это был браузер (исключение, конечно, специально обученный на тебя бот). В случае, когда есть nginx и доступ к его конфигурации, совместно с модулем secure_link можно будет педалить ботов не затрагивая вызов похапе.
Минусы: как и все автоматизированные методы, неустойчив к бригаде китайцев.