Подскажите, как и каким образом можно защитить гостевую книгу и форму обратной связи от спама? Есть ли какие-нибудь бесплатные фильтры, скрипты?
Вид для печати
Подскажите, как и каким образом можно защитить гостевую книгу и форму обратной связи от спама? Есть ли какие-нибудь бесплатные фильтры, скрипты?
1. Задать им незначащие теги:
(mrdeaths@mail.ru)Код:mdeaths<em style="display: none;">[/i]@<div style="display: inline;"></div>mail.ru
2. Функция view()
3. Ну и 'текст на картинке' реализовывается с помощью Графической библиотеки GD.Код:function view()
...
Lacoste
Спасибо. Можно подробнее о пунктах 2 и 3?
Lacoste привел лишь способы спрятать имейл-адрес на странице от спам-ботов, но насколько я понял проблема Artemij'я заключалась не в том чтобы спрятать мыло, а в том что ему спамят через форму )) поэтому советы видимо немного не в тему..
если я правильно понял суть проблеммы, то могу предложить допустим данные формы отправлять на какой-то почтовый ящик, а не сохранять в базу/файл/..., а для этого ящика использовать какой-нибудь антиспам фильтр, или еще лучше если на мейлсервере будет SpamAssassin ))
если по какой-либо причине такой вариант не проходит (т.е. данные с формы отправляются не на мыло), то начинаем с простых способов защиты - баним айпи-адреса с которых приходил спам, можно написать простенький фильтр, который проверяет содержит ли текс какую-либо ключевую фразу, и так далее. не уверен, но наверное можно даже установить спамасасин на сервер и использовать предоставляемое им апи для такой фильтрации.. вобщем вариантов решения проблемы много, но посоветовать готовый конкретный продукт к сожалению не могу ))
[Only registered and activated users can see links. Click Here To Register...]
видимо имелась в виду GDЦитата:
... с помощью Графической библиотеки GB.
2. Предположем Это наша гостевая книга:
Обратите внимание на функцию View():Код:<?
echo "<html><head><title>Гостевая книга</title></head><body>";
echo "<h1>Гостевая книга</h1>";
$file_gb="./gbook/gb.txt"; *****// это файл гостевой книги
$file_tmp="./gbook/gb_tmp.txt"; *****// это временный файл, используемый сценарием
$Max=50; * *// максимальное число выводимых сообщений
// Функция для вывода файла gb.txt
function view()
{
$Messages=file('./gbook/gb.txt');
echo "
<table width=100%>"; $i=0;
foreach($Messages as $v)
{
$i++;
if ($i % 2 == 0) echo "<tr><td>$v</td></tr>";
else echo "<tr><td bgcolor=gray>$v</td></tr>";
// Если номер сообщения = 50 (то есть уже выведено 50 сообщений), прерываем цикл
if ($i==$Max) break;
}
}
if (!isset($Post)) {
// Выводим форму для ввода нового сообщения
echo "<table width=100% border=1>";
echo "<tr><td><h2>Новое сообщение</h2><form method=post action=$SCRIPT_NAME>";
echo " Email: <input type=text name=email>";
echo " Сообщение <input type=text name=mes> <input type=submit name=Post></td></tr>";
echo "</table></form>";
// Выводим сообщения
view();
}
else
{
if(file_exists($file_tmp)) die("fatal error, call administrator!");
// Добавляем новое сообщение в начало файла
if(copy($file_gb, $file_tmp))
{
if($w=fopen($file_gb,"w"))
{
*flock($w,2); *// блокируем доступ к основному файлу
*// $mes - это сообщение пользователя
*// перед внесением сообщения в файл удалим из него HTML-теги
// strip_tags($mes);
*fwrite($w,"[".date("d.m.Y H:i:s").$email."] ". strip_tags($mes)."\n");
*if(!$r=fopen($file_tmp,"r")) die("can't open file");
*flock($r,1); *// блокируем доступ к временному файлу
*while($mes=fgets($r,10240))
*{
* fputs($w,$mes);
*}
*// Снимаем блокировку и закрываем файлы
*flock($r,3);
*fclose($r);
*flock($w,3);
*fclose($w);
*// Удаляем временный файл
*unlink($file_tmp);
}
}
echo "Сообщение успешно записано в файл";
// Выводим гостевую книгу
view();
}
?>
3. С помощью библиотеки GD. Вот пример картинки для защиты от спам-ботов.Код:function view()
{
$Messages=file('./gbook/gb.txt');
echo "
<table width=100%>"; $i=0;
foreach($Messages as $v)
{
$i++;
if ($i % 2 == 0) echo "<tr><td>$v</td></tr>";
else echo "<tr><td bgcolor=gray>$v</td></tr>";
Код:<?
****/*
*Защита От спам-Ботов.
*****/
****//
****// KeyImage script
****// версия 1.0 от 20.12.05
****//
****list($msec, $sec)=explode(chr(32), microtime());
****$mTimeStart=$sec+$msec;
****$code=substr(md5(sha1(strtok($_SERVER['QUERY_STRING'], '|'))), 8, 6);
****$im=imagecreatetruecolor(406, 16);
****mt_srand((double)microtime()*100000000000);
****$r=mt_rand(130, 185);
****$g=mt_rand(130, 185);
****$b=mt_rand(130, 185); $k=0;
****for ($i=0; $i<=203; $i++) {
*$k++; if ($k==4) $k=1;
*if ($k==1) $r++;
*if ($k==2) $g++;
*if ($k==3) $b++;
*$c[$i]=imagecolorallocate($im, $r, $g, $b);
*imageline($im, $i, 0, $i, 16, $c[$i]);
****}
****$r1=$r; $g1=$g; $b1=$b;
****for ($i=203; $i<=406; $i++) {
*$k++; if ($k==4) $k=1;
*if ($k==1) $r--;
*if ($k==2) $g--;
*if ($k==3) $b--;
*$c[$i]=imagecolorallocate($im, $r, $g, $b);
*imageline($im, $i, 0, $i, 16, $c[$i]);
****}
****$r=255-$r1;
****$g=255-$g1;
****$b=255-$b1;
****$w=imagecolorallocate($im, $r, $g, $b); $k=0;
****$white=imagecolorallocate($im, 255, 255, 255);
****imageline($im, 0, 8, 406, 8, $white);
****$k=0;
****for ($i=33+mt_rand(-10, 10); $i<400; $i+=(66+mt_rand(-10, 10))) {
*imagestring($im, 3, $i, 1, substr($code, $k, 1), $w);
*$k++;
****}
****imagepng($im);
****imagedestroy($im);
?>