@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 формы. никаких дополнительных полей руками добавлять не нужно. *** }
* Имя:

E-mail:

Сообщение:

^rem{ *** ВНИМАНИЕ! Класс меняет содержимое атрибута 'name', *** } ^rem{ *** поэтому вы не должны привязываться к нему в CSS/XSL и анализировать его после POST формы. *** } ^rem{ *** Анализируйте $form:uid например *** }

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[]=]

VISITOR

$oAntiSpam.VISITOR ^oAntiSpam._get[$oAntiSpam.VISITOR]

UID

$oAntiSpam.UID
$oAntiSpam.VALUE

UIDS

Данные, пришедшие из формы

^$env:REQUEST_METHOD: $env:REQUEST_METHOD
^if($form:fields){ }{

Ничего нету.

}

Сохранение и чтения значения в хешфайле

^oAntiSpam.set[ZIGI] =^oAntiSpam.get[]=
#end @debug[]