Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
2n 16.09.2008 11:51
Здравствуйте!$oAntiSpam[^Antispam::create[ ^rem{ *** можно включить "старый" стиль сообщения об ошибках, когда в exception.type *** } ^rem{ *** приходят значения вида "Antispam.unknown-uid" *** } ^rem{ *** в "новом" стиле в exception.type приходит "Antispam", а "unknown-uid" приходит в exception.source *** } # $.bOldErrorStyle(1) ^rem{ *** что пишем в log файл. подробнее про константы можно посмотреть в переменной класса LOG_MASK *** } $.iLogAccess(1+2+16+32) $.hExpires[ $.dBan(1) ] ^rem{ *** список разрешенных referer для отображения формы и при submt-е *** } $.hReferer[ $.bRefuseEmpty(1) # $.print[^table::create{sHref^#0Ahttp://$env:SERVER_NAME/}] # $.exec[^table::create{sHref^#0Ahttp://$env:SERVER_NAME/}] ] $.hFields[ ^rem{ *** при отображении формы будем ругаться если в form будут обнаружены не упоминаемые в <form/> поля *** } $.bRefuseUnknown(1) ^rem{ *** но мы можем перечислить не упомянутые в <form/> поля, которым всё таки разрешено приходить *** } # $.tAllowed[^table::create{sName^#0Arequest^#0Alang}] ] $.hFilter[ ^rem{ *** порог срабатывания защиты *** } $.dThreshold(20) ^rem{ *** список фильтров и их весов, которыми проверяются все поля формы при submit-е данных *** } $.tMask[^table::create{dScore sRegexp 1 <a href=[^^>]+> 3 \sWMZ\s 3 Z\d{12} }] ] ^rem{ *** дополнительное поле с uid будет добавляться с указанными параметрами *** } $.hUid[ $.sTag[input] $.sName[uid] ] ^rem{ *** модифицирование action формы *** } $.hAction[ $.sType[hidden] ^rem{ *** настоящая кнопка action должна быть обязательно нажата (нельза постить форму нажатием Enter-а в text) *** } $.bRealRequired(1) ^rem{ *** к настоящему action будут добавлены 3 фиктивных *** } $.iFakeCount(3) ^rem{ *** эти атрибуты будут добавлены к настоящему submit-у *** } ^rem{ *** тут вы можете использовать функции: $.value{^method[]} *** } $.hRealAttr[ $.class[real] $.value[[+]] ] ^rem{ *** эти атрибуты будут добавлены к фиктивным submit-полям *** } $.hFakeAttr[ $.class[fake] $.value[[-]] ] ] ]] #^debug[] $bShowForm(1) ^oAntiSpam.exec{ ^rem{ *** проверяем все-ли в форме заполнено как надо *** } ^check[] #на какой адрес будет отправляться письмо $to[Nickolay Nickolaev <2n@mail.ru>] #от какого адреса будет отправляться письмо $from[feedback@$env:SERVER_NAME] ^connect[$connect_string]{ ^void:sql{INSERT into gb (date, name, email, comment) VALUES ('^now.sql-string[]','$form:name','$form:email','$form:text') } } ^connect[$connect_string]{ $gb[^table::sql{SELECT id FROM gb ORDER BY id DESC LIMIT 1 }] } $body[ Сообщение: $form:comment<br> Имя: $form:name<br> ^if(def $form:email){E-mail: $form:email<br>} <br><a href="http://$env:SERVER_NAME/control/gb.html?publish=$gb.id">Опубликовать запись</a> <span style="font: 70% Arial^;">(либо она уничтожится через 15 дней)</span> <br><br>Сообщение отправлено: ^now.sql-string[] <br>IP: $env:REMOTE_ADDR ] ^mail:send[ $.from[$from] $.to[$to] $.subject[Новое сообщение в гостевой книге сайта http://$env:SERVER_NAME/] $.charset[$response:charset] $.html{$body} ] <p><font color="red">Ваше сообщение будет рассмотрено, а затем размещено оператором в ближайшее время. Благодарим за ваш комментарий.</font></p> $bShowForm(0) }{ $bShowForm(0) $exception.handled(1) ^switch[$exception.type]{ ^case[$oAntiSpam.sClassName]{ ^switch[$exception.source]{ ^case[unknown-uid]{ <p><font color="red">Ваше сообщение уже было добавлено <b>ранее</b>.</font></p> } ^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]{ <p>Не заполнены обязательные поля формы.</p> $bShowForm(1) } ^case[DEFAULT]{ $exception.handled(0) } } } ^if($bShowForm){ ^oAntiSpam.print{ ^rem{ *** xhtml формы. никаких дополнительных полей руками добавлять не нужно. *** } <form method="post"> <i>* Имя:</i><br /> <input type="text" name="name" value="$form:name" /><br /> <i>E-mail:</i><br /> <input type="text" name="email" value="$form:email" /><br /> <i>Сообщение:</i><br /> <textarea name="text" cols="60" rows="10">$form:text</textarea><br /> ^rem{ *** ВНИМАНИЕ! Класс меняет содержимое атрибута 'name', *** } ^rem{ *** поэтому вы не должны привязываться к нему в CSS/XSL и анализировать его после POST формы. *** } ^rem{ *** Анализируйте $form:uid например *** } <input type="submit" name="action" value="Отправить" class="class" /> </form> }{ ^switch[$exception.type]{ ^case[$oAntiSpam.sClassName]{ $exception.handled(1) ^switch[$exception.source]{ ^case[referer]{ ^rem{ *** открытие формы с неизвестного referer-а *** } ^bye[] } ^case[unknown-fields]{ ^rem{ *** в form пришли неизвестные поля *** } ^bye[] } } } } } } </div> </td><td width="15" style="background:url('http://restostar.com/img/c_1.gif') #422515^; background-repeat: repeat-x^; background-position: bottom^;">  ^; </td></tr> </table> ########################################################################### @check[] ^if(!def $form:name){ ^throw[check.fields;] } #end @check[] ########################################################################### @bye[] #<p>Привет, спамер. #<br />Этим сообщением уведомляем, что вы очень желанный гость <a href="http://lleo.aha.ru/na/">здесь</a>.</p> $response:status(404) #end @bye[] ########################################################################### @debug[] #^throw[;=$env:REQUEST_METHOD=^form:fields._count[]=] <h2>Список UID</h2> <ul> ^oAntiSpam.UIDS.menu{<li>$oAntiSpam.UIDS.sValue ($oAntiSpam.UIDS.bFake)</li>}[^#0A] </ul> <h2>Данные, пришедшие из формы</h2> ^if($form:fields){ <ul> ^form:fields.foreach[sKey;vValue]{<li>$sKey=$sValue</li>}[^#0A] </ul> }{ <p>Ничего нету.</p> } <h2>Сохранение и чтения значения в хешфайле</h2> ^oAntiSpam.set[ZIGI] =^oAntiSpam.get[]= #end @debug[]