parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Проблема с использованием класса Antispam.p

2n 16.09.2008 11:51

Здравствуйте!

Для защиты гостевой книги решил использовать класс Antispam.p.

Подключил сам класс (в нем поменял только директорию хранения хеш-файла).
Изменил страницу с формой, вставив туда вызов класса (из примера).

После заполнения формы и нажатия "Отправить" не выдается никаких соообщений, не ошибок не сообщений об успешной отправке. Обработки тоже не происходит (должна произойти запись в БД и отправиться сообщение на эл. почту)
В чем может быть проблема?
$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^;">
&nbsp^;
</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[]