За последние 24 часа нас посетили 10177 программистов и 1087 роботов. Сейчас ищут 402 программиста ...

Капча для всех! - новый сервис

Тема в разделе "Решения, алгоритмы", создана пользователем S.t.A.M., 27 авг 2009.

  1. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Решил я тут немного изучить CURL...
    В итоге родился новый сервис, который, на мой взгляд, может сильно облегчить жизнь новичкам, да и профессионалам тоже... прошу оценить, любая критика приветствуется!

    Этот сервис позволяет легко установить проверку "Капчу" на любые формы.
    Для работы сервиса нужно подключить небольшой файл с двумя функциями и написать несколько строчек простейшего кода... вообщем есть пример - сами разберетесь )))

    Принцип работы следующий: есть некий КЛЮЧ - любое слово из букв и цифр, при выводе формы генерируется КОД, пара КЛЮЧ-КОД отправляются на сервер, который возвращает ссылку на капчу, эта ссылка вставляется в форму, в эту же форму в скрытое поле вставляется КОД. т.к. пользователь (или робот) не знает КЛЮЧА он не может определить по коду капчу.
    После отправки формы, скрипт получает введенную капчу и КОД и отправляет на сервер полученные капчу, КОД и свой КЛЮЧ - сервер проверяет совпадает ли капча с парой КЛЮЧ-КОД и результат возвращает скрипту.

    Пример работы посмотреть можно тут: http://test.web-portfolio.ru/cap_test.php
    Скачать можно тут: http://www.dsfile.com/capcha/

    Версия 2.0
    Сделано в новой версии:
    1. Отказался от cURL в пользу file_get_contents (спасибо Mr.M.I.T.)

    Версия 1.1
    Сделано в новой версии:
    1. Добавлена еще одна капча от DMT (http://dmtsoft.ru)
    2. Добавлены настройки капчи.
    3. Теперь на выбор два варианта капчи: простая и сложная (по умолчанию)
    4. Можно задать матрицу символов, которые применяются в капче
    5. Можно указать кол-во символов
    6. Можно изменить цвет фона и цвет символов.


    Версия 1.0 бета
    Реализован только механизм.



    Исходники примеров:

    PHP:
    1.  
    2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3. <html xmlns="http://www.w3.org/1999/xhtml">
    4. <head>
    5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    6. <title>Test Capcha</title>
    7. </head>
    8.  
    9. <body>
    10.  
    11. <?php
    12. $capcha_key = 'qwerty';  // Это КЛЮЧЬ - он должен быть одинаковым в файле с формой и в скрипте, который обрабатывает данные формы!
    13. include_once 'capcha.inc';
    14.  
    15. function capcha_OK () { echo "Ваше сообщение допущено!";}
    16.  
    17. function capcha_ERROR () {
    18.     echo "ОШИБКА! Ваше сообщение НЕ допущено!";
    19. }
    20.  
    21. ?>
    22.  
    23. <form id="form1" name="form1" method="post" action="">
    24. <input name="code" type="hidden" value="<?=$code?>" />
    25.     <table border="0" cellspacing="0" cellpadding="0">
    26.         <tr>
    27.             <td colspan="3">
    28.                 <textarea name="text" id="text" cols="45" rows="5">Сообщение</textarea>
    29.             </td>
    30.         </tr>
    31.         <tr>
    32.             <td colspan="3">
    33.                 Введите код с картинки:
    34.             </td>
    35.         </tr>
    36.  
    37.         <tr>
    38.             <td width="93" align="right" valign="middle">
    39.  
    40.                 <input name="capcha_val" type="text" id="code" size="10" maxlength="10" />
    41.             </td>
    42.             <td width="115" align="left" valign="middle">
    43.                 <img src="<?=$capcha_img_src?>" />
    44.             </td>
    45.             <td width="78" align="right">
    46.                 <input type="submit" name="send" id="send" value="Отправить" />
    47.             </td>
    48.         </tr>
    49.     </table>
    50.  
    51. </form>
    52. </body>
    53. </html>
    54.  
    Файл 'capcha.inc':
    PHP:
    1. <?php
    2. //==========================================
    3. // НАСТРОЙКИ:
    4.  
    5. // Тип капчи:
    6. // 0 - Capcha by DMT ([url=http://dmtsoft.ru]http://dmtsoft.ru[/url])
    7. // 1 - Простая капча.
    8. $cap_mode = 0;
    9.  
    10. //Матрица символов:
    11. //$cap_matrix = 'Q1WqEaRzT2YwUsIxO3PedKcJ4HrGfFvD5StAgZbX6CyVhBnN7Mujm8ik9oL0p'; // Все символы [a-Z0-9] (кроме 'l' - маленькая L)
    12. $cap_matrix = 'QAZWSXEDCRFVTGBYHNUJMIKLP'; // для типа 0 - только заглавные буквы!
    13.  
    14. //Количество символов
    15. $cap_len = 5;
    16.  
    17. //Цвет фона и цвет символов
    18. $cap_bg = ''; // без значений - значения по умолчанию
    19. $cap_cl = ''; // примеры: 'ff0000', '00f'
    20.  
    21. //==========================================
    22.  
    23.  
    24. $code = md5(rand(999,999999).rand(999,999999).rand(999,999999));
    25. $capcha_img_src = img_url ($capcha_key,$code);
    26.  
    27. $capcha_code = $_POST['code'];
    28. $capcha_val = $_POST['capcha_val'];
    29.  
    30. if ($_POST['text'])
    31.     if (check($capcha_key,$capcha_code,$capcha_val)) {capcha_OK ();}
    32.         else {capcha_ERROR ();}
    33.  
    34.  
    35. function img_url ($key,$code) { global $cap_mode,$cap_matrix,$cap_len,$cap_bg,$cap_cl;
    36.     $url  = "http://dsfile.com/capcha.php?get=img&key={$key}&code={$code}";
    37.     $url .= "&cap_mode={$cap_mode}&cap_matrix={$cap_matrix}&cap_len={$cap_len}&cap_bg={$cap_bg}&cap_cl={$cap_cl}";
    38.     $result = file_get_contents($url);
    39.     return $result;
    40. }
    41.  
    42. function check ($key,$code,$capcha_val) {
    43.     global $cap_mode,$cap_matrix,$cap_len,$cap_bg,$cap_cl;
    44.     $url  = "http://dsfile.com/capcha.php?get=check&key={$key}&code={$code}&capcha_val={$capcha_val}";
    45.     $url .= "&cap_mode=$cap_mode&cap_matrix=$cap_matrix&cap_len=$cap_len&cap_bg=$cap_bg&cap_cl=$cap_cl";
    46.     $result = file_get_contents($url);
    47.     if (trim($result)=='1') return true; else return false;
    48. }
    49. ?>
     
  2. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    В ближайшее время добалю несколько переменных для настройки капчи:
    - Еще один вариант капчи, будет на выбор два варианта: простая и сложная (по умолчанию)
    - Матрица символов - можно будет задать символы которые применяются в капче
    - Кол-во символов
    - Цвет фона и цвет символов
    - Размеры капчи

    Если есть еще идеи - оставляйте тут.
     
  3. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Я прошу прощения, я тут давно не появлялся.
    Добрый вечер, буду краток.

    Выдвигаю не идею и не критику, скорее предожение.
    Если это сервис, то может его лучше интегрировать так:
    HTML:
    1. <img src="http://captcha-service.ru/image.jpg&rand=client-side-rand&apikey=12341234123412412341341234324" ...>
    Само собой без curl и js ;)
     
  4. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    а в чем собственно говоря преимущество от использования такого сервиса перед обыкновенной генерацией капчи у себя?
     
  5. kostyl

    kostyl Guest

    наверно, с использованием сторонней капчи будет больше сообщений от пользователей...
     
  6. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Примуществ несколько:
    1. Основное - простота использования и интеграции, не надо запариваться с куками и сессией.
    2. Если текущий алгоритм генерации капчи будет взломан, он будет обновлен без вашего участия.
    3. Гибкая настройка (в будущем)

    У меня на моем движке есть самописный модуль для реализации капчи, но я сам постепенно переведу все на этот сервис т.к. нынешняя реализация очень геморна в установке... приходится каждый раз вспомниать алгоритм работы, а он в капче достаточно мудренный...
     
  7. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Не понял почему... Обоснуй!
     
  8. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Нет такой вариант не подходит т.к. на сервер кроме КОДА отправляется КЛЮЧ - который пользователь не должен знать! А вданной реализации и ключ и код идут GET-параметрами...
     
  9. kostyl

    kostyl Guest

    Очень сомнительное преимущество.
     
  10. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Почему?
    Если у кого то робот научился распозновать капчу то она меняется причем сразу у всех... что плохого? Или Вы хотите подождать пока Вашу капчу распознают и потом сидеть и писать новый алгоритм рисования капчи?
     
  11. kostyl

    kostyl Guest

    а что ждать пока ты напишешь?
     
  12. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Ну так там будут на выбор несколько разных вариантов, ты можешь предложить свой я его добавлю - если есть готовый код - это дело 5 минут
     
  13. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Версия 1.1 (http://dsfile.com/capcha/)

    Сделано в новой версии:
    1. Добавлена еще одна капча от DMT (http://dmtsoft.ru)
    2. Добавлены настройки капчи.
    3. Теперь на выбор два варианта капчи: простая и сложная (по умолчанию)
    4. Можно задать матрицу символов, которые применяются в капче
    5. Можно указать кол-во символов
    6. Можно изменить цвет фона и цвет символов.
     
  14. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    http://recaptcha.net/ - на флеше правда решение.
    Честно говоря, нарисовать картинку с буквами - не такая уж проблема.
     
  15. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    вообще не проблема )))
     
  16. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    S.t.A.M.
    А чем отличается от recaptcha?
     
  17. Mr.M.I.T.

    Mr.M.I.T. Активный пользователь

    С нами с:
    28 янв 2008
    Сообщения:
    4.584
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    реализовать можно проще, это раз.

    Даёт нам картинку
    <img src="http://captcha.ru/image.php?user_id=007">
    Даёт нам то что было на ней написано
    $code=file_get_content("http://captcha.ru/code.php?user_id=007&password=bond");

    подобные решения делать на пхп - мягко скажем, не комильфо, это два =)
     
  18. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Это проще, но:
    1. требует регистрацию на сервере.
    2. В этом случае, я так понимаю, будет всегда один и тот же код на капче? )))
    3. Или если не один, что если одновременно несколько человек на сайте форму заполняют? Им каждому выдалась разная капча и что тогда вернет http://captcha.ru/code.php?user_id=007&password=bond ?

    Хм... а на чем их тогда делать, на Perl'e? 8-/
     
  19. Mr.M.I.T.

    Mr.M.I.T. Активный пользователь

    С нами с:
    28 янв 2008
    Сообщения:
    4.584
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    $code=file_get_content("http://captcha.ru/code.php?user_id=007&password=bond");
    чем не регистрация?
    зачем?
    добавь ещё один параметр
     
  20. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Ну по первому взляду:
    Плюсы:
    1. Не требует регистрации
    2. Проще в установке
    3. Проще в работе
    4. Более гибко встраивается в форму (насколько я понял у ReCaptcha 1 форма на 1 учетку)
    5. На выбор несколько вариантов каптчи
    6. Настраиваемая цветовая схема

    Минусы:
    1. Не такая красивая
    2. Менее функциональная
    3. Нет голосового оповещения (его хоть раз кто то использовал?!)
    4. Проекту 2 дня и веду его я один )

    Ну что бы окончательно понять плюсы и минусы надо попробывать и то и другое...
     
  21. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Mr.M.I.T.
    Возможна и твоя реализация и еще сотня других...
    Для твоей необходима база данных для хранения, у меня все обрабатывает один скрипт из 120 строк, и без БД...
    Чем проще тем надежнее )))

    P.S.
    Хотя у меня можно заменит cURL на file_get_content! я подумаю над этим )))
     
  22. Mat

    Mat Активный пользователь

    С нами с:
    12 дек 2006
    Сообщения:
    391
    Симпатии:
    0
    Всмысле сервис? ты сам чтоли будешь генерить мне капчу для проверки на бота????
     
  23. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Сервис автоматизирован! )))
    Генерится она будет скриптом на сервере dsfile.com/capcha и выкидываться в виде картинки. На этом же сервере происходит сравнение введенных символов с капчей, а твой скрипт получает результат - правильно введена капча или нет (true or false).
     
  24. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Есть global key, на несколько сайтов..
    По моему опыту - на неограниченное...
     
  25. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    А ну возможно... Я посмотрел пример что форма тянется с учетки, т.е. как я понял каждую форму нужно строить и настраивать в учетке ReCaptcha?

    А нет... это у них просто примеры такие )))