Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » В помощь вебмастеру » Защита форм от роботов (скрипт)

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4

Открыть новую тему     Написать ответ в эту тему

Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще один..
http://www.phpclasses.org/browse/package/1538.html

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 08:57 22-04-2004
exMIB



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
На твой странице я ничего не нашел.
 
А вот на этой что-то есть, но я не понял принцип его работы.
Там два кода каких-то: на картинке и в тексте. Зачем не понятно.
 
http://www.penseur.homelinux.net/index.php?nav=/frame_nav.php&main=%2Fprogrammation%2Fphp%2Focr_captcha%2Fpage1.php
 
Но зато есть исходники:
http://www.penseur.homelinux.net/programmation/index.php?rubrique=0&sousrubrique=8

Всего записей: 3329 | Зарегистр. 27-09-2001 | Отправлено: 17:57 22-04-2004 | Исправлено: exMIB, 18:00 22-04-2004
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
exMIB

Цитата:
На твой странице я ничего не нашел.  

там нужна регистрация

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:39 22-04-2004
Spice

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ищите по слову CAPTCHA
Реализация для Java http://sourceforge.net/projects/jcaptcha/
Реализация для PHP http://osx.freshmeat.net/projects/captchaphp/
Реализация для ASP http://sourceforge.net/projects/asp-captcha/
Ну или поспрашивайте Google
 

Всего записей: 35 | Зарегистр. 10-01-2003 | Отправлено: 13:48 24-06-2005
Danil Lab



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите как правильно сделать:  
Генирурую случайное изображение, пользоватьль вводит цифирки с изобрашения, если правильно, то выводим Правильно!
если нет то выводим форму и сообщение и мол не правильный код ввел.

Код:
 
<?php  
$cod=rand(1000,9999);  
 
header ("Content-type: image/png");  
$im = @imagecreate (40, 20);  
$background_color = imagecolorallocate ($im, 255, 255, 255);  
 
$text_color = imagecolorallocate ($im, 50, 100, 150);  
$fon_color = imagecolorallocate ($im, 210, 210, 210);  
imagestring ($im, 6, 3, 3, $cod, $fon_color);  
imagestring ($im, 6, 2, 2, $cod, $text_color);  
 
imagepng($im);  
 
echo "  
<form method=post>  
<img border="0" src=\"?????\">  
*Код:<input type=text name=code>  
<input type=submit value=Добавить>  
</form>";  
 
 
if(!empty($_POST['code']))  
{  
if ($cod==$_POST['code'])  
{  
Echo "Вы ввели:".$code;  
echo "Правильно!";  
}else{  
echo "Номер введен не верно, попробуйте еще раз.";  
}  
}  
?>
 

Выделить генератор изображений в отдельый файл, правильно не получается.

Всего записей: 269 | Зарегистр. 12-06-2005 | Отправлено: 17:58 24-01-2006 | Исправлено: Danil Lab, 18:01 24-01-2006
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Danil Lab
а почему бы не воспользоваться готовым продуктом?  
тебе нужно создавать соответствие между картинкой (ее кодом) и каким нить ключом (хэшем). Хэш вставляется в форму и при посте достается по нему инфа о том, какой там был код и сравнивается.. Аналогично можно сделать чисто на сессиях, но с ними есть небольшие недостатки
ссылку дал сюда для использования готового кода, а не обсуждения своего.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:11 24-01-2006
Danil Lab



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
а почему бы не воспользоваться готовым продуктом?

Не одного компакного не видел. Да и свой роднее.
 
Пришлось изобретать велосипед
 
Основано на сесиях:
Помогите переделять чтоб с хэшем было.
Мне этот не подходит т.к. в течениии одной сесии можно обращатся сколько хочешь раз, а мне надо тьлько 1.

Код:
 
<?PHP
// 2006 (c) D@nil (danillab.com.ru)
 
$config_max_digits="4"; // знаков
 
 
if ($QUERY_STRING=="")
{
// session id
$sid=session_id();
if(!$sid){
  session_start();
  $sid=session_id();
}
 
// генерируем
$gen_code = "";
for($i=0; $i<$config_max_digits;$i++)    $gen_code = $gen_code.rand(0,9);
 
// сохраняем  
$HTTP_SESSION_VARS["noautomationcode"] = $gen_code;
 
// выводим  
echo ("
<img src='showcode.php?sid=$sid'>
<form action='?begin' method='post'>
    <input type='hidden' name='sid' value='$sid'>
 
    <input type='text' name='code'>
    <input type='Submit' name='Submit'>
</form>");
}
 
if ($QUERY_STRING == "begin")
{
session_start();
$gen_code = $HTTP_SESSION_VARS["noautomationcode"];
 
 // если не равно завершаем скрипт.
 if ($code == $gen_code)
 {
  echo "Защищеные данные";
 }else{
  echo "<b>Код не верный</b><br />Повторите попутку<br />";
  echo ("<img src='showcode.php?sid=$sid'><form action='?begin' method='post'><input type='hidden' name='sid' value='$sid'><input type='text' name='code'><input type='Submit' name='Submit'></form>");
 }
 
}
 
?>
 
 

 
showcode.php

Код:
 
<?PHP
// 2006 (c) D@nil (danillab.com.ru)
 
$img_x="40"; // ширина
$img_y="20"; // высота
$font_size=5; // размер<5
 
$sid=trim($HTTP_GET_VARS["sid"]);
 
session_id($sid);
session_start();
$gen_code = $HTTP_SESSION_VARS["noautomationcode"];
 
$img = imagecreate ($img_x,$img_y);
$background_color = imagecolorallocate ($img, 255, 255, 255);
 
$f_x = imagefontwidth ( $font_size );
$f_y = imagefontheight ( $font_size );
 
// Выравниваем по центру
$x = ($img_x - strlen($gen_code) * $f_x )/2;
$y = ($img_y - $f_y) / 2;
 
$color = imagecolorallocate($img,000,000,000);
 
 
 
////Вносим в изображение шум
 
// Шумы в виде рамок
$dc = ImageColorAllocate($img, rand(0,255), rand(0,255), rand(0,255));
ImageRectangle($img, rand(0, $img_x/2 ), rand(0, $img_y/2 ), rand($img_x / 2, $img_x) ,rand($img_y / 2, $img_y), $dc);
 
$dc = ImageColorAllocate($img, rand(0,255), rand(0,255), rand(0,255));
ImageRectangle($img, rand(0, $img_x/2 ), rand(0, $img_y/2 ), rand($img_x / 2, $img_x) ,rand($img_y / 2, $img_y), $dc);
 
// выводим текст
imagestring ( $img, $font_size, $x, $y, $gen_code, $color);
 
// Шумы в виде точек
for($i = $img_x * $img_y / 10; $i >= 0;$i--)
{
 ImageSetPixel($img, rand(0,$img_x), rand(0,$img_y), ImageColorAllocate($img, rand(0,255), rand(0,255), rand(0,255)));
}
 
 
header("Content-Type:image/gif");
imagegif($img);
 
?>
 





Давай, лучше, на "переделать" создашь тему в Веб программинге, чтобы не захламлять здесь. /Cheery/

Всего записей: 269 | Зарегистр. 12-06-2005 | Отправлено: 21:48 24-01-2006 | Исправлено: Cheery, 23:16 24-01-2006
mrrc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеется простенький форум без регистрации наподобие WWWBoard, в последнее время рассылка мусора ботами просто не дает никакой жизни.
 
Есть ли готовые решения реализованные на перле в виде добавления к форме нового сообщения дополнительного поля с циферками, сумму сложения которых "живому" пользователю нужно ввести для возможности осуществления своего поста?

Всего записей: 254 | Зарегистр. 12-08-2001 | Отправлено: 22:56 27-08-2006
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mrrc

Цитата:
Есть ли готовые решения реализованные на перле в виде добавления к форме нового сообщения дополнительного поля с циферками, сумму сложения которых "живому" пользователю нужно ввести для возможности осуществления своего поста?

зачем сумму? просто цифры с картинки с шумовым фоном
http://search.cpan.org/search?query=captcha&mode=all

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:01 27-08-2006
mrrc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Все-таки попробую прикрутить описанный вторым вариантом метод отсюда http://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi?az=post&forum=vsluhforumID8&om=3149&omm=1

Всего записей: 254 | Зарегистр. 12-08-2001 | Отправлено: 23:18 27-08-2006
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще один способ попробовал, пока пашет.
Если бот не умеет работать с js, то.. когда страница генерится, можно вставить input type=hidden, с именем, которое генерится с помощью JS неявным образом.
после чего на сервере проверять в сабмите, есть ли оно.
можно имя часто менять, если форма генерится самим скриптом. пока отсеивает все, что не открыто браузером.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:10 25-09-2006
nyinick



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А я сделал очень просто... роботы когда автоматом заполняют формы, то им нужна сама стурктура формы... я её вывожу через жабаскрипт, робот её не обрабатывает и поэтому не получает форму для анализа, и поэтому уходит дальше.
Юзеры же когда открывают форму, то браузер выполняя простейший скрипт нормально отображает форму для заполнения

Всего записей: 251 | Зарегистр. 26-06-2006 | Отправлено: 22:29 25-09-2006
Terabyte



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
http://captcha.ru
(removed)




не надо вот таким заниматься /Cheery/

Всего записей: 1325 | Зарегистр. 09-09-2002 | Отправлено: 23:15 25-09-2006 | Исправлено: Cheery, 23:20 25-09-2006
ShafMAN

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
http://captcha.ru

Подскажите с KCAPTCHA. На одном хостинге работает, на другом нет. Чего ему не хватает ещё? Картинка отображается, просто не сравнивает картинку с введённым текстом и всё, вообще игнорирует это...

Всего записей: 125 | Зарегистр. 09-01-2005 | Отправлено: 14:23 20-11-2006
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

вот, кстати, прикольные реализации-анимированные.. проблема в том, технически можно сломать на основе корреляции между разными кадрами..
 
http://gifs.hu/phpclasses/index.php?m=captcha2
http://gifs.hu/phpclasses/index.php?m=captcha
 
ну и 3D версия
http://ocr-research.org.ua/teabag.html

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:34 22-12-2006
electric1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Подскажите с KCAPTCHA. На одном хостинге работает, на другом нет. Чего ему не хватает ещё? Картинка отображается, просто не сравнивает картинку с введённым текстом и всё, вообще игнорирует это...

 
Навеняка чтото с сессиями не так. Скорее всего пробуешь интегрировать в какой то форум или портал?

Всего записей: 35 | Зарегистр. 07-01-2003 | Отправлено: 00:56 23-12-2006
ShafMAN

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Навеняка чтото с сессиями не так. Скорее всего пробуешь интегрировать в какой то форум или портал?

нет, никуда не интегрировал...в настройках PHP включил output_buffering и проверка заработала...

Всего записей: 125 | Зарегистр. 09-01-2005 | Отправлено: 14:34 23-12-2006
podlom

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Могу еще свою версию подобного скрипта на PHP предложить: http://shkodenko.kiev.ua/index.php?lang_id=1&content_id=58

Всего записей: 34 | Зарегистр. 10-10-2005 | Отправлено: 14:59 18-04-2007
galym74



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуете форумчане!
 
 
Имеется сайт, на котором есть форма для отправки сообщении на почту. Он работал на скрипте PHPSendMail. После смены хостинга форма отправки сообщении перестал работать. Выдает сообщение «Ошибка программы - недоступна функция "imap_binary"!»
После разговора с хостинг провайдером узнал что функция imap_binary отключен. Теперь, можно ли редактировать скрипт чтобы он работал корректно.  
Код

Код:
<?php
#  В данном файле ничего менять не нужно, однако если у вас есть трудности с возвратом на указанную
#  в настройках страницу, то отредактируйте строку 100 как указано в коментарии.
error_reporting(0);
require("./config.inc");
require("./header.inc");
# Функции
  function formtohtml ($str) {
    if (get_magic_quotes_gpc()) {
    $str = stripslashes($str);
    }
  $str = trim($str);
  $str = htmlspecialchars ($str, ENT_QUOTES);
  $str = str_replace("|", "/", $str);
  $str = str_replace("\r", "", $str);
  $str = str_replace("\n", "<br>", $str);
  $str = eregi_replace("(<br>*){2,}","<br><br>",$str);
  $str = eregi_replace("[ ]{2,}", " ", $str);
  return $str;
  }
  function htmltoform ($str) {
  $str = str_replace("&amp;", "&", $str);
  $str = str_replace("&quot;", "\"", $str);
  $str = str_replace("&#039;", "'", $str);
  $str = str_replace("&lt;", "<", $str);
  $str = str_replace("&gt;", ">", $str);
  $str = str_replace("<br>", "\r\n", $str);
  return $str;
  }
# Отправка
  if (!empty($_GET['a']) and $_GET['a'] == "m") {
  $var['fields'] = array("name"=>"имя", "email"=>"e-mail", "subject"=>"заголовок", "message"=>"текст сообщения");
  $notice['error'] = array();
    foreach ($var['fields'] as $key => $value) {
    if (empty($_POST[$key]) || (($_POST[$key] = formtohtml($_POST[$key])) == "0")) $notice['error'][] = $value;
    }
    if (empty($notice['error'])) {
      if (preg_match("/^([a-z,0-9,_,\-,\.])+\@([a-z,0-9,_,\-])+(\.([a-z,0-9])+)+$/",$_POST['email'])) {
      $t['c'] = file($config['recip_f']);
      $t['n'] = sizeof($t['c']);
        for ($i=0;$i<$t['n'];$i++) {
        $t['c'][$i] = explode("|",trim($t['c'][$i]));
        }
        if (!empty($_POST['recip']) and !empty($t['c'][$_POST['recip']-1])) {
        $var['recip_n'] = $t['c'][$_POST['recip']-1][1];
        $var['recip_e'] = $t['c'][$_POST['recip']-1][0];
          if (function_exists("imap_binary")) {
            function mail_convert($str) {
            $str = trim(imap_binary(addcslashes($str, "\"!@\\!@(!@)")));
            return $str;
            }
          $var['subj'] = "=?Windows-1251?B?".trim(imap_binary(htmltoform($_POST['subject'])))."?=";
          $var['header']  = "From: =?Windows-1251?B?".mail_convert(htmltoform($_POST['name']))."?= <".$_POST['email'].">\r\n";
          $var['header'] .= "MIME-Version: 1.0\r\n";
          $var['header'] .= "Content-Transfer-Encoding: 8bit\r\n";
          $var['header'] .= "Content-Type: text/plain; charset=\"Windows-1251\"\r\n";
          $var['header'] .= "X-Mailer: PHP v.".phpversion();
          $var['message']  = htmltoform($_POST['message']);
          if (!empty($config['features'])) $var['message'] .= "\r\n\r\n---------------------------------------\r\nIP адрес отправителя: ".$_SERVER['REMOTE_ADDR'];
          # Пытаемся послать сообщение
            if (mail("=?Windows-1251?B?".mail_convert(htmltoform($var['recip_n']))."?= <".$var['recip_e'].">",$var['subj'],$var['message'],$var['header'])) {
            $notice['ok'] = "Сообщение успешно отправлено";
            }
            else {
            $notice['error'] = "Системная ошибка - сбой функции &quot;mail&quot;";
            }
          }
          else {
          $notice['error'] = "Ошибка программы - недоступна функция &quot;imap_binary&quot;";
          }
        }
        else {
        $notice['error'] = "Ошибка настоек программы - неверный получатель";
        }
      }
      else {
      $notice['error'] = "Пожалуйста, проверьте правильность e-mail";
      }
    }
    else {
    $notice['error'] = "Пожалуйста, введите ".implode(", ",$notice['error']);
    }
  }
echo "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\">\r\n";
  if (empty($notice['ok'])) {
  echo "<form name=\"SM\" method=\"POST\" action=\"".$_SERVER['PHP_SELF']."?a=m\">\r\n";
  }
  else {
  // ПРИ ВОЗНИКНОВЕНИИ ОШИБКИ "METHOD POST NOT ALLOWED" ИЗМЕНИТЬ "POST" на "GET"
  echo "<form name=\"GT\" method=\"POST\" action=\"".$config['url_path']."\">\r\n";
  }
# Сообщение о завершении / ошибке
  if (!empty($notice)) {
  echo "<tr><td align=\"center\">";
    if (!empty($notice['ok'])) {
    echo "<p><b><font color=\"#008000\">".$notice['ok']."!</font></b></p>";
    }
    elseif (!empty($notice['error'])) {
    echo "<p><b><font color=\"#800000\">".$notice['error']."!</font></b></p>";
    }
  echo "</td></tr>\r\n";
  }
# Вывод формы
  if (empty($notice['ok'])) {
  echo "<tr><td align=\"center\">";
  require("./form.inc");
  echo "</td></tr>\r\n";
  }
echo "<tr><td align=\"center\"><table border=\"0\" cellpadding=\"5\" cellspacing=\"0\"><tr><td>";
# Кнопки
  if (empty($notice['ok'])) {
  echo "<input type=\"submit\" value=\"Отправить\"></td>\r\n";
 
  }
  else {
  echo "<input type=\"submit\" value=\"".$config['url_name']."\">\r\n";
  }
echo "</td></tr></table></td></tr>\r\n";
  if (!empty($config['copyshow'])) {
   }
echo "</form></table>\r\n";
# Футер
require("./footer.inc");
?>

 
 
Есть еше файлы
config.inc
footer.inc
recip.txt
form.inc
header.inc
 
Хотелось бы конечно с генератором изображении но это потом.
 Только сильно не пинайте

Всего записей: 92 | Зарегистр. 29-06-2005 | Отправлено: 20:19 23-04-2007 | Исправлено: galym74, 20:21 23-04-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
galym74
ну и? от нас то ты что хочешь?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:46 23-04-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4

Компьютерный форум Ru.Board » Интернет » В помощь вебмастеру » Защита форм от роботов (скрипт)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru