Люди! Помогите, пожалуйста. У меня на сайте что-то вроде доски объявлений. При том эта доска работает на скрипте, переделанного из скрипта гостевой книги.
В последние три дня мой сайт стал пользоваться почему-то повышенным вниманием у манимейкеров и любителей прорекламировать свой сайт. На сайте запрещены ссылки на спонсоров и открытая реклама сайтов. В общем, нужен бан-лист и фильтр слов.
Бан-лист по следующим пунктам:
мыло
IP
Имя
Адрес
А фильтр нужен, чтобы он не допускал к публикации объявления, содержащие слова, например: from?id или id и т.п.
Можно ли такую пакость сделать и как? Вот текст основного скрипта:
#!/usr/bin/perl
# -------------------------------
#Колличество сообщений на странице
$mess=100;
#######
#
$smile1="
http://nb.h1.ru/guest/smile1.gif";
$smile2="
http://nb.h1.ru/guest/smile2.gif";
$smile3="
http://nb.h1.ru/guest/smile3.gif";
$filename="data.blt";
$filehdr="header.blt";
$fileend="end.blt";
@months = (\'01\',\'02\',\'03\',\'04\',\'05\',\'06\',\'07\',\'08\',\'09\',\'10\',\'11\',\'12\');
@days = (\'Вс\',\'Пн\',\'Вт\',\'Ср\',\'Чт\',\'Пт\',\'Сб\');
$color="green";
$add=0;
# -------------------------------
#Get data from memory --------
if ($ENV{\'REQUEST_METHOD\'} eq "POST")
{
read(STDIN, $bufer, $ENV{\'CONTENT_LENGTH\'});
}
else
{
$bufer=$ENV{\'QUERY_STRING\'};
}
#End -------------------------
# Decode data ----------------
@pairs = split(/&/, $bufer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
# End ------------------------
$action=$FORM{action};
$page=$FORM{page};
#### #### ####
&html;
if ($action eq "add"){&add;}
open(GB, "$filename");
@DATA=
;
close (GB);
#-----------------------------------------
$allmess = @DATA;
$pageend=$page+$mess-1;
&forma;
&show;
&glos;
&htmlend;
# #######sub########### #
sub add
#Saving new data
{
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
$year+=1900;
$pdata="[$days[$wday] $hour:$min - $mday/$months[$mon]/$year]";
$name=$FORM{name};
if($name eq "")
{
&error;
}
$FORM{\'text\'} =~ s/\\n/
/g;
$text=$FORM{text};
if($text eq "")
{
&error;
}
if($text eq "")
{
&error;
}
if ($FORM{mail} ne "")
{
$mail=$FORM{mail};
}
else
{
$mail="0";
}
if ($FORM{url} ne "")
{
$url=$FORM{url};
}
else
{
$url="0";
}
if ($FORM{city} ne "")
{
$city=$FORM{city};
}
else
{
$city="0";
}
$STRING = join("::",$name,$mail,$url,$pdata,$city,$text,"0");
open(GB, "+<$filename") || open(GB, ">$filename");
@DATA=;
@DATA=("$STRING\\n",@DATA);
seek(GB,0,0);
print GB @DATA;
close (GB);
}
sub forma
# HTML cod for form
{
print < http://nb.h1.ru/addnotice-017.html">Добавить объявление в рассылку
FORMA
}
sub show
{
print "";
}
sub glos
{
print "";
$all = int($allmess / $mess)+1;
print "| ";
for($i=1;$i <= $all;$i++)
{
$to=$i*$mess-$mess;
$a=$page/10+1;
if($a ne $i)
{print " $i |";}
else
{print " $i |";}
}
print "";
}
sub html
{
print "Content-type: text/html\\n\\n";
open (HEADER,"$filehdr");
while ()
{print "$_";}
close (HEADER);
}
sub htmlend
{
print "
Всего объявлений в разделе - $allmess";
open (SOF,"$fileend");
while ()
{print "$_";}
close (SOF);
}
sub error
{
print "Content-type: text/html\\n\\n";
print "$title";
print "Поля: \\"ИМЯ\\" и \\"ТЕКСТ ОБЪЯВЛЕНИЯ\\" обязательны для заполнения.";
print "";
exit;
}
З.Ы. Если у этого скрипта есть дыры, скажите, я буду очень рад (исправить их)!
Спасибо