| Новости | 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[]