Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Гостевая книга
 
 автор: Елена V   (04.01.2008 в 14:09)   письмо автору
 
 

Здравствуйте ! С Новым годом всех !
У меня на сайте установлена гостевая книга на mysql скаченная с этого сайта. В нее постоянно поступает спам - каждый день приходится удалять. Как Вы считаете, установка
kcaptcha поможет ? Если да, то подскажите, что и в какие файлы нужно дописать, чтобы ее подсоединить к гостевой книге (файлы kcaptcha я скачала). Желательно полный код, т.к. я с PHP не очень ...
Спасибо.

   
 
 автор: ddhvvn   (04.01.2008 в 16:20)   письмо автору
 
   для: Елена V   (04.01.2008 в 14:09)
 

Как правильно замечает Хеопс, "Стоит только запретить ссылки в гостевой и спаммеры уходят оттуда!"...

   
 
 автор: Unkind   (04.01.2008 в 16:41)   письмо автору
 
   для: Елена V   (04.01.2008 в 14:09)
 

Там же в KCAPTCHA есть и пример, что нужно дописать.

   
 
 автор: Паша   (04.01.2008 в 16:59)   письмо автору
 
   для: Unkind   (04.01.2008 в 16:41)
 

Можно просто сгенерировать случайное число ( с помощью ф-ци rand()) и проверять его при обработке формы, я так сделал.

   
 
 автор: ddhvvn   (04.01.2008 в 17:01)   письмо автору
 
   для: Паша   (04.01.2008 в 16:59)
 

???

   
 
 автор: Паша   (04.01.2008 в 17:03)   письмо автору
 
   для: ddhvvn   (04.01.2008 в 17:01)
 

Вот часть кода:

Function show_form($s="") {
  global $name,$email,$message,$kd,$kod;
  if ($s){ 
echo "<div id='text1' style='position:absolute; overflow:hidden; left:350px; top:170px; width: 600px; z-index:5'><b>Ошибка:</b> $s<hr></div>";
$kd=rand (1111, 9999);}
?> 

<div id="text1" style="position:absolute; overflow:hidden; left:350px; top:190px; width: 600px; z-index:5"> 
<table width=500 cellpadding=3 cellspacing=3>
  <form action=questbook.php method="post">
    <tr valign="middle"> 
      <th colspan="2"> <div align="left"><b>Добавление сообщения:</b></div></th>
    </tr>
    <tr> 
      <Td width="27%"><div align="left">Ваше имя: <font color="#FF0000">*</font></div></TD>
      <td width="72%"><div align="left">
        <input type=text name=name size=34 value="<? echo $name?>">
      </div></td>
    </tr>
    <tr> 
      <Td><div align="left">Ваш Email:</div></TD>
      <td><div align="left">
        <input type=text name=email size=34 value="<? echo $email?>">
      </div></td>
    </tr>
        <tr> 
      <Td><div align="left">Введите код <b><? echo ($kd); ?></b>:</div></TD>
      <td><div align="left">
        <input type=text name=kod size=34 value="">
      </div></td>
    </tr>
    <tr> 
      <Td colspan=2><div align="left">Текст сообщения: <font color="#FF0000">*</font><br> 
            <textarea cols=60 rows=10 name=message><? echo $message?></textarea>
      </div></TD>
    </tr>
    <tr> 
      <td colspan=2><div align="left">
        <input name="submit" type=submit value=" Добавить сообщение! " alt=Добавить сообщение>
      </div></td>
    </tr>
    <tr> 
      <td height="35" colspan="2"><div align="left"><font size="-1">Поля, отмеченные звёздочкой 
        (<font color="#FF0000">*</font>) обязательны к заполнению.</font> </div></td>
    </tr>
    <input type=hidden name=a value=1>
<input type=hidden name=k value="<? echo $kd?>">
  </form>
</table>
</div>

<p>
<?
  
exit();
}
// если сообщение еще не добавляется, выводим форму
  
if (!$a
{
$kd=rand (11119999);
show_form();}
  
// если сообщение добавляется, проверяем форму на ошибки
  
if (!$nameshow_form("Укажите Ваше имя!");
  if (!
$messageshow_form("Вы не оставили сообщение!");
  
  if (
$k<>$kod)
  {
show_form("Неправильно указан код!");}

   
 
 автор: sim5   (04.01.2008 в 17:07)   письмо автору
 
   для: Паша   (04.01.2008 в 17:03)
 

Как раздражает эта "секретность" где непопадя, на гостевую ставить такую хрень, ну это уже болезнь! Запретить сообщения со ссылками, самый лучший и безболезненный вариант для пользователей.

   
 
 автор: Unkind   (04.01.2008 в 17:13)   письмо автору
 
   для: sim5   (04.01.2008 в 17:07)
 

Нет, ну запрет постинга ссылок тоже не очень-то хороший вариант. Лучше CAPTCHA именно при попытке запостить ссылку выдавать.

   
 
 автор: sim5   (04.01.2008 в 17:50)   письмо автору
 
   для: Unkind   (04.01.2008 в 17:13)
 

Согласен, в какой-то мере, но Гостевая, это скорее выяснение некоторых вопросов, а вот форум - тут да. У меня просто нервов не хватает на каждую мелочь вводить код, да еще бывает такую CAPTCH'U завернут, что хоть сам вокруг монитора крутись, чтобы понять что там написано.
Кстати, не знал о существовании службы, случайно прочитал на сайте 1С:

В настоящее время в Интернете функционируют службы, принимающие жалобы по поводу получения спама. Наиболее известная из них, к примеру - http://www.spamcop.net/. Если получатель письма направляет жалобу в одну из этих служб, почтовый сервер, отсылающий письмо, на некоторое время попадает в черный список. От серверов, находящихся в черных списках, многие почтовые сервера (до 30%) не принимают почту. Это может продолжаться до двух суток, а иногда и гораздо больше.

Принимая во внимание то, что почтовым сервером нашего хостинга пользуется большое число людей, попадание его в черный список, даже временно, очень нежелательно. В этом случае тысячи писем, в том числе, направленные на известные почтовые сервера mail.ru, yandex.ru, rambler.ru, не будут доставлены.

   
 
 автор: antf   (04.01.2008 в 18:39)   письмо автору
 
   для: sim5   (04.01.2008 в 17:50)
 

Идея с ссылками понравилась больше всего. Вот код:

<?php
$url_exists 
false;
//e-mail адреса
if(preg_match("/[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,5}/i"$text))
  
$url_exists true;
//ссылки, нормальные
elseif(preg_match("#(http://|www)[0-9a-z-/\.\=_\?\#&]+#i"$text))
  
$url_exists true;
//ссылки без http и www
elseif(preg_match("#[0-9a-z-/\._]+\.ru|com|net|info|biz|org#i"$text))
  
$url_exists true;

if(
$url_exists == true)
  
$errors[] = "Незарегистрированные пользователи не могут вставлять url в текст сообщения";
?>

   
 
 автор: Faraon   (04.01.2008 в 19:11)   письмо автору
 
   для: antf   (04.01.2008 в 18:39)
 

>//e-mail адреса
>if(preg_match("/[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,5}/i", $text))

Пользователи домена первого уровня museum обломятся :)

P.S. Так же и здесь:
>elseif(preg_match("#[0-9a-z-/\._]+\.ru|com|net|info|biz|org#i", $text))
Очень многие обломятся, нехорошо

   
 
 автор: antf   (04.01.2008 в 19:15)   письмо автору
 
   для: Faraon   (04.01.2008 в 19:11)
 

Спасибо, я думал самый длинный домен - это
info

   
 
 автор: Faraon   (04.01.2008 в 19:22)   письмо автору
 
   для: antf   (04.01.2008 в 19:15)
 

Ради интереса можете к примеру ознакомиться
http://www.tigir.com/domains.htm

   
 
 автор: antf   (04.01.2008 в 19:21)   письмо автору
 
   для: Faraon   (04.01.2008 в 19:11)
 

>>Очень многие обломятся, нехорошо

Тоже чувствую, что может иногда быть ложная тревога, но не могу подобрать реальные примеры. Поэтому и вынес этот код отдельно (чтобы можно было закомментировать). Например, какие варианты обломятся? Спаммеры тоже очень находчивы...

   
 
 автор: antf   (04.01.2008 в 19:26)   письмо автору
 
   для: antf   (04.01.2008 в 19:21)
 

>Ради интереса можете к примеру ознакомиться

Самые длинные - museum и travel. Поставить туда десяточку, чтобы было с запасом. Самое оно :)

   
 
 автор: Faraon   (04.01.2008 в 19:36)   письмо автору
 
   для: antf   (04.01.2008 в 19:21)
 

>Спаммеры тоже очень находчивы...

Если считать на счет спамерской уловки, то всегда можно послать спам как бы от любого домена и соответственно любого адреса.
Так же и через функцию mail того же самого PHP. :)

Поэтому принимать письма с не существующих адресов, это дело Почтового сервера.

   
 
 автор: antf   (04.01.2008 в 19:46)   письмо автору
 
   для: Faraon   (04.01.2008 в 19:36)
 

>>Если считать на счет спамерской уловки, то всегда можно послать спам как бы от любого домена и соответственно любого адреса.

хм... На Softtime'е спама нет, хотя раньше они "выметали его ведрами". Может cheops подскажет волшебный код. или тут комплексный метод?

>>сегда можно послать спам как бы от любого домена и соответственно любого адреса

Секундочку, но тогда и адрес сайта будет другим. Причем тут mail, мы текст (переменная $text) сообщения гостевой/форума фильтруем?

   
 
 автор: Faraon   (04.01.2008 в 19:51)   письмо автору
 
   для: antf   (04.01.2008 в 19:46)
 

>Причем тут mail, мы текст (переменная $text) сообщения гостевой/форума фильтруем?

Я отвлекся от темы "Гостевая книга" и переключился на тему почтовых ящиков и начал рассуждать поэтому поводу. Пардон

>хм... На Softtime'е спама нет, хотя раньше они "выметали его ведрами".
Иногда боты проскальзывают :)

   
 
 автор: antf   (04.01.2008 в 20:05)   письмо автору
 
   для: Faraon   (04.01.2008 в 19:51)
 

В 100% случаев (на моем опыте) спаммеры отправляют в гостевую/форум рекламный текст, содержащий url. Большинство таких объявлений - реклама порно-сайтов. В худшем случае - это будет гигантский фрагмент текста, содержащий различные словосочетания похабных слов (на поисковики работают). Мало того, что его долго приходится прокручивать, чтобы добраться до кнопки "удалить", так еще увидит Яндекс - есть риск попасть в бан (мое предположение).

   
 
 автор: Faraon   (04.01.2008 в 20:11)   письмо автору
 
   для: antf   (04.01.2008 в 20:05)
 

>Увидит Яндекс - есть риск попасть в бан (мое предположение).
Насчет поисковых систем ничего сказать не могу так как я не оптимизатор под поисковые системы, не SEO, но мне конечно мало бы понравилось когда на моем форуме завелись бы спамеры. Посетителей бы отпугивало только в раз :)

   
 
 автор: antf   (04.01.2008 в 20:30)   письмо автору
 
   для: Faraon   (04.01.2008 в 20:11)
 

Они заводятся на любом сайте, где есть гостевая или форум, даже самом захолустном. Ваше неизвестность их не смутит.

Насчет отпугивало, не знаю. У меня стоит счетчик посещений тем. Так вот людей туда ходит немало (относительно общего кол-во посещающих). Может думают, что это администрация там какие-то акции выдумывает...

   
 
 автор: Faraon   (04.01.2008 в 20:39)   письмо автору
 
   для: antf   (04.01.2008 в 20:30)
 

>Насчет отпугивало, не знаю
А я думаю если бы зашел на форум где очень много просто спама , а не информации, то практически сразу бы и ушел.

>Может думают, что это администрация там какие-то акции выдумывает...
Не знаю, по характеру постов сразу было бы понятно, что это не акция от администрации!

Вообщем то как не защищайся, все равно спамеры будут, либо вы с супер-крутой защитой отсеете многих спамеров, включая и большое количество нормальных пользователей, либо на каждом нормальном форуме есть модераторы, которые за этим делом следят.

   
 
 автор: Unkind   (04.01.2008 в 17:10)   письмо автору
 
   для: Паша   (04.01.2008 в 17:03)
 

Ну и код :)))))) Вы его хоть тестировали? :))

   
 
 автор: Паша   (04.01.2008 в 17:45)   письмо автору
 
   для: Unkind   (04.01.2008 в 17:10)
 

Этот код вполне рабочий, а что вас так смущает?

   
 
 автор: Unkind   (04.01.2008 в 18:16)   письмо автору
 
   для: Паша   (04.01.2008 в 17:45)
 

2Паша: Да нифига он не рабочий. Идет обращение к каким-то неопределенным переменным.

2sim5: да, согласен. Я сейчас тоже предлагаю пройти CAPTCHA только если будет замечено что-то подозрительное (ненормальная активность, подозрение на спам и проч.).

   
 
 автор: Паша   (04.01.2008 в 18:21)   письмо автору
 
   для: Unkind   (04.01.2008 в 18:16)
 

Не знаю какие там неопределённые переменный ты заметил, но эта гостевая у меня стабильно работает и не в одном экземпляре уже!

   
 
 автор: Unkind   (04.01.2008 в 18:27)   письмо автору
 
   для: Паша   (04.01.2008 в 18:21)
 

Вы этот нерабочий код еще и по другим скриптам распихали?

   
 
 автор: Паша   (04.01.2008 в 18:32)   письмо автору
 
   для: Unkind   (04.01.2008 в 18:27)
 

Ещё раз повторяю всё работает, то что там задействованы глобальные переменные то в этом минус, признаю!!!

   
 
 автор: Unkind   (04.01.2008 в 18:48)   письмо автору
 
   для: Паша   (04.01.2008 в 18:32)
 

> Ещё раз повторяю всё работает, то что там задействованы глобальные переменные то в этом минус, признаю!!!
Ну это у Вас работает. Для остальных это нерабочий код. Не сейчас, так позже будет

   
 
 автор: Паша   (04.01.2008 в 18:51)   письмо автору
 
   для: Unkind   (04.01.2008 в 18:48)
 

Вы бы чем критиковать подсказали бы как его модернезировать под более правильный код!!!!

   
 
 автор: Unkind   (04.01.2008 в 19:01)   письмо автору
 
   для: Паша   (04.01.2008 в 18:51)
 

См. сообщение sim5 04.01.2008 в 18:34
Полезно почитать http://ru2.php.net/manual/ru/language.variables.predefined.php

   
 
 автор: Паша   (04.01.2008 в 19:04)   письмо автору
 
   для: Unkind   (04.01.2008 в 19:01)
 

Ну про глобальные переменные я всё понял, а какие ещё недостатки, и ещё такой вопрос каков ваш опят в программировании(php)?

   
 
 автор: Unkind   (04.01.2008 в 19:12)   письмо автору
 
   для: Паша   (04.01.2008 в 19:04)
 

> какие ещё недостатки
Использование short tags ("<? ... ?>") нежелательно, так как они могут быть отключены. Лучше писать "<?php ... ?>".

И еще очень снижает читабельность такая вещь, как смешивание HTML и PHP-кода. Лучше выводить HTML-код средствами PHP.

> Пользователи домена первого уровня museum обломятся :)
Скорее наоборот нет :))

   
 
 автор: sim5   (04.01.2008 в 18:27)   письмо автору
 
   для: Паша   (04.01.2008 в 18:21)
 

register_globals = off, и уже труба вашей гостевой.

   
 
 автор: Паша   (04.01.2008 в 18:34)   письмо автору
 
   для: sim5   (04.01.2008 в 18:27)
 

А как можно использовать функцию без глобальных переменных? И отсуда второй вопрос - зачем тогда вообще нужны функции, если без глобальных переменных они не работают?

   
 
 автор: sim5   (04.01.2008 в 18:42)   письмо автору
 
   для: Паша   (04.01.2008 в 18:34)
 

Ну во первых, при выключенной опции, вы не сможете выполнить это:
if (!$a)....
if (!$name)....
потому как не будет таких переменных: $a, $name, а будет $_POST['a'], $_POST['name']...
Ну а об остальном не охота.

   
 
 автор: Trianon   (04.01.2008 в 17:02)   письмо автору
 
   для: Елена V   (04.01.2008 в 14:09)
 

В общем-то капчу имеет смысл ставить на расширенные возможности ( к примеру тот же постинг ссылок в тексте сообщений) . Если запирать капчей ввод вообще любого текста - ударит по людям, а не по спаммерам.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования