@USE Antispam.p ########################################################################### @main[][oAntiSpam;bShowForm] ^rem{ *** с помощью CSS или JS можно не показывать фиктивные submit-ы, раскомментируйте чтобы посмотреть *** } #^head[]
$oAntiSpam[^Antispam::create[$hAntiSpamParams]] ^debug[$oAntiSpam] $bShowForm(true) ^oAntiSpam.exec{ ^rem{ *** проверяем все-ли в форме заполнено как надо *** } ^check[] ...тут должен быть ваш код по обработке пришедших от посетителя данных...Ваше сообщение было успешно добавлено.
$bShowForm(false) }{ $bShowForm(false) $exception.handled(true) ^switch[$exception.type]{ ^case[$oAntiSpam.CLASS_NAME]{ ^switch[$exception.source]{ ^case[unknown-uid]{Ваше сообщение уже было добавлено ранее.
} ^case[empty-uid]{ ^rem{ *** post данных, в которых напрочь отсутствует uid - вероятно спамер *** } ^bye[] } ^case[fake-uid-exist]{ ^rem{ *** post данных, в которых есть запрещенные uid - точно спамер *** } ^bye[] } ^case[no-real-uid]{ ^rem{ *** post данных, в которых нет требуемого валидного uid - точно спамер *** } ^bye[] } ^case[referer]{ ^rem{ *** post данных с неизвестного referer-а - точно спамер *** } ^bye[] } ^case[suspected-content]{ ^rem{ *** при submit-е данных с помощью заданного фильтра обнаружили подозрительные данные - вероятно спамер *** } ^bye[] } } } ^case[check.fields]{Не заполнены обязательные поля формы.
$bShowForm(true) } ^case[DEFAULT]{ $exception.handled(false) } } } ^if($bShowForm){ ^oAntiSpam.print{ ^rem{ *** xhtml формы. никаких дополнительных полей руками добавлять не нужно. *** }P.S. Не забудьте посмотреть результирующий html (View Source) и обратить внимание на автоматически добавленный в форму элемент ^taint[], а также на то, что у реального и фиктивных элементов ^taint[] были произведены изменения атрибутов (в том числе @name).
}{ ^switch[$exception.type]{ ^case[$oAntiSpam.CLASS_NAME]{ $exception.handled(true) ^switch[$exception.source]{ ^case[referer]{ ^rem{ *** открытие формы с неизвестного referer-а *** } ^bye[] } ^case[unknown-fields]{ ^rem{ *** в form пришли неизвестные поля *** } ^bye[] } } } } } } ^debug[$oAntiSpam] #end @main[] ########################################################################### @check[] ^if(!def $form:name){ ^throw[check.fields;] } #end @check[] ########################################################################### @debug[oAntiSpam][sKey;sValue] #^throw[;=$env:REQUEST_METHOD=^form:fields._count[]=]Ничего нету.
}