Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Флейм > Я придумал капчу без сессий на php


Автор: BlackRu 22.6.2014, 21:25
Думал-думал и придумал капчу без использования сессий на php.
Но сразу предупреждаю, что тема все равно флеймовая. 
Если интересно, покажу код. Думаю, бот будет бессилен. 
 

Автор: ТоляМБА 22.6.2014, 23:39
Цитата(BlackRu @  22.6.2014,  23:25 Найти цитируемый пост)
без использования сессий

Студенты были бы тебе очень благодарны  smile 

Автор: BlackRu 23.6.2014, 04:27
 smile Для проверки я использовал дату smile
Код

date("FYhi");


Предложение пользователю выглядит так: Введите текущий месяц (на английском), год, часы, минуты, секунды, наносекунды, кванты без пробелов   smile  в поле smile Подсказка наверху сайта 

А Вверху сайта указано время по серверу. 

Автор: Ilya81 23.6.2014, 08:56
Цитата(BlackRu @  22.6.2014,  21:25 Найти цитируемый пост)
бот будет бессилен

У меня вообще такое впечатление, что большинство создателей captch'ей руководствуются именно этим критерием. А то, что некоторые люди оказываются тоже не в состоянии расшифровать такие каракули, их не волнует. Давно ещё на exler.ru был баннизм на подобную тему, но это смешно до тех пор, пока не нужно воспользоваться чем-то, где такая captcha. Как и инструкции, переведённые на русский язык автоматически, смешны до тех пор, пока не требуется из подобной белиберды что-то понять.

Автор: BlackRu 23.6.2014, 19:09
А способен ли бот вообще разобрать даже саму простую капчу? И заморачивается хоть кто-то с написанием таких ботов?

Думаю мою систему проверки, основанную на серверном времени, бот просто не заметит. 

Кстати, еще вариант капчи без сессий, например, для отправки почтовой формы:

 Скрипт раз в 10 минут забирает из словаря рандомом слово, например, русское и английское - перевод.
английское становится ключом, а пользователь получает от системы русское слово с просьбой его перевести.  

Автор: BlackRu 23.6.2014, 22:41
Посетитель заполняет форму, потом читает условия капчи, нажимает "Узнать точное время", заполняет поле капчи и отправляет
В общем вот она реализация. 

Точное время открывается во всплывающем окне, окно обновляется раз в секунду

Код

<?php
header ("Refresh: 1");
?>
<h1><?=date("F Y h:i:s")?></h1>
.

Автор: megabist 24.6.2014, 01:16
Ох.
Сколько лет прошло, а форум живет.

P.S. Флейм же. =)
P.P.S. ТоляМБА вот, опять же. Круто.
P.P.P.S. Перестаю тут флудить. Был очень удивлен.

Автор: BlackRu 24.6.2014, 07:26
megabist, Так-то, да. smile Флейм, ничего не скажешь. 
Не лезть же с такой темой в PHP, по шапке быстро дадут smile

Автор: ksnk 24.6.2014, 07:51
BlackRu, если юзер не успел ввести капчу за минуту - его можно послать лесом?  smile  

Автор: Bulat 24.6.2014, 08:52
Цитата(BlackRu @  22.6.2014,  21:25 Найти цитируемый пост)
Думал-думал и придумал капчу без использования сессий 


Цитата(ТоляМБА @  22.6.2014,  23:39 Найти цитируемый пост)
Студенты были бы тебе очень благодарны


Точно по студенчески! Я тоже иногда думал, как сдать экзамены без сессий!  smile 

Автор: BlackRu 24.6.2014, 10:03
И без зачетной книжки, конечно же. 

Можно протестировать. 
http://starina.myftp.org/test2/mail.php

Автор: BlackRu 24.6.2014, 10:26
ksnk, дополнил скрипт. Удалил месяц и год.

Разберем ситуацию с точки зрения human behavior.  Надеюсь, меня не оштрафуют за использование иностранных слов. 
  • Посетитель заполняет форму. 
  • Потом читает условия "капчи". 
  • Жмет подсказку.
  • И тут его сознание должно проснуться.
В подсказке время обновляется раз в 10 секунд, т.е. если даже он сначала откроет подсказку, вероятность промаха  снижается. Можно сделать обновление времени в подсказке раз в 5 секунд, тогда мы еще снижаем вероятность промаха, но нагружаем сервер лишними запросами. smile

Посетитель может сам обновить время, нажав на кнопку "уточнить время". Само название этой кнопки уже как бэ (использую хоть раз молодежный стиль написания условного наклонения) намекает на то, что пользователю нужно что-то вдумчиво осознать для отправки письма. 
  • Вопросы, конечно, остаются:
  • Сколько нужно времени посетителю, чтобы он осознал, как работает система проверки?
  • Сколько нужно времени в среднем, чтобы ввести 4 цифры (без пробелов). 
  • Вопрос безопасности, сможет ли как-то бот определить систему проверки. 
  • Какова вероятно, что кто-то будет писать такую функцию проверки, если такая форма используется на одном-двух сайтах?
Для наглядности скриншот последней версии программы:  smile 

P.S. Человеческое поведение, конечно, можно проверить только на практике. 

Автор: Агрох 24.6.2014, 11:04
Цитата(BlackRu @  24.6.2014,  11:26 Найти цитируемый пост)
Вопрос безопасности, сможет ли как-то бот определить систему проверки.


Элементарно. По ключевым словам в условии "каптчи".

Цитата(BlackRu @  24.6.2014,  11:26 Найти цитируемый пост)
Какова вероятно, что кто-то будет писать такую функцию проверки, если такая форма используется на одном-двух сайтах?


1) Т.к. данную систему разрабатывают для повышения защиты от ddos атак (так ведь?) и в качестве альтернативы существующим (которые чем то не устраивают по уровню защиты) то это означает, что есть необходимость защищаться. А если есть необходимость защищаться, значит есть угроза и те, кто эту угрозу создают. А значит те, кто создают эту угрозу, если им это действительно надо, заморочатся и напишут бота.
2) Если система будет действительно эффективна, то рано или поздно её начнут пользовать больше чем 1-2 сайта, что приведёт к повышению вероятности написания кем либо бота для проверки именно на такую систему защиты.

Автор: BlackRu 24.6.2014, 13:23
Цитата

Элементарно. По ключевым словам в условии "каптчи"



Добавим условие. Ключевые слова выводятся в изображении. Если ты про семантический анализ ботов условия капчи.

Цитата

1) Т.к. данную систему разрабатывают для повышения защиты от ddos атак (так ведь?) и в качестве альтернативы существующим (которые чем то не устраивают по уровню защиты) то это означает, что есть необходимость защищаться. А если есть необходимость защищаться, значит есть угроза и те, кто эту угрозу создают. А значит те, кто создают эту угрозу, если им это действительно надо, заморочатся и напишут бота.


Это если говорить в общем. Но  я последнее время стараюсь избегать частых обобщений. 
Речь о конкретной ситуации.  
  • Есть один сайт. Блог или сайт визитка или еще что-то. Т.е. при использовании такой защиты учитывается масштабность проекта, социальная и экономическая значимость. Может быть, политическая.  smile
  • На сайте есть форма обратной связи с автором. Т.е. письмо отправляется только одному человеку. Скажем так, жесткая привязка, когда нельзя добавить адреса получателей в случае попытки использования формы для спам-рассылки.  Не рассматриваем взлом, так как для массовой рассылки есть и другие средства. Тот же сбор почтовых адресов и рассылка через всякие бесплатные почтовики. 
    Я думаю, эта технология у спамеров уже отработана.
В связи с вышесказанным зададим вопрос. В случае взлома этой простой защиты, что может сделать спамер с данной формой. Фактически, отправить письмо автору сайта, допустим какой-то спам. 

Из этого следует, что усилия затраченные на анализ работы скрипта и написание бота не коррелируют с результатом. Согласны. А спамеры люди, я думаю, достаточно прагматичны. 
Поэтому по первому пункту, думаю, вероятность написания такого бота критически низкая.
 
Цитата

2) Если система будет действительно эффективна, то рано или поздно её начнут пользовать больше
 чем 1-2 сайта, что приведёт к повышению вероятности написания кем либо бота для проверки именно на такую систему защиты. 


А вот это практически исключено. Т.е. чистая теория или даже фантастика. Почему?
Люди у нас любят готовые надежные решения,  т.е. все будут устанавливать чужие или 
писать свои навороченные капчи с кучей шифровок и перешифровок. 
Т.е., вероятность, использования такого скрипта на сайте ничтожна мала.  


P.S.
Я начал делать эту защиту, когда при регистрации на одном довольно известном 
форуме обнаружил интересный способ защиты от спам-бота. Выглядело это так: "Введите сумму чисел 56 и 9". Я не смог сразу составить пароль, так как требования на том сайте высокие, нужно кучу разного вида символов написать, поэтому страницу перезагружал несколько раз, какого же было мое удивление, что после перезагрузки страницы эта "капча" не изменилось. smile

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

Автор: ТоляМБА 24.6.2014, 22:15
megabist,  smile 

P.S.S. Поставил твою цитату в подпись.  smile 

Автор: BlackRu 25.6.2014, 18:01
А если такой вариант:

1. Пользователь заполняет форму, нажимает отправить.
2. Скрипт отправляет данные в MySQL вместе с рандомно сгенерированным кодом.
3. Пользователя кидает на другую страницу, из базы выводится его сообщение и код,
если код неверный, предлагается, допустим, еще одна попытка. Если опять неверно, запись в бд уничтожается. 

Автор: krundetz 25.6.2014, 23:02
ТоляМБА, рад видеть. smile 

Автор: ТоляМБА 26.6.2014, 21:24
О! krundetz, аналагична!!!  smile 

Автор: BlackRu 26.6.2014, 23:17
 smile Ну ладно. Капчей уже никого не удивишь, думал я думал, писал эту капчу писал, а получились в итоге бинарные часы на чистом PHP. 
Код

<?php header("Refresh: 1");?>
<h1><span style="font-size:100pt">
<? 
$H=date("h");

$H=base_convert($H, 10, 2);
$H = strtr($H, "0", ".)" );
$H = strtr($H, "1", ":" ); 

echo "$H h";

$I=date("i");

$I=base_convert($I, 10, 2);
$I = strtr($I, "0", ".)" );
$I = strtr($I, "1", ":" ); 

echo " $I min";

$Sec=date("s");

$Sec=base_convert($Sec, 10, 2);
$Sec = strtr($Sec, "0", ".)" );
$Sec = strtr($Sec, "1", ":" ); 

echo " $Sec sec";?></span></h1>


Кстати, "капча" лучше звучит без "т", т.е. не каптча, а капча, имхо естественнее для русского языка. 

P.S. 

ТоляМБА, 
krundetz, Ой,  я тут не один что ли!? Я вас тоже рад видеть, товарищи.  smile 

Автор: ТоляМБА 27.6.2014, 13:59
Цитата(BlackRu @  27.6.2014,  01:17 Найти цитируемый пост)
Ой,  я тут не один что ли!?
Это же Флейм, сюда уже давно никто не заходит, так что ты тут один. Мы тебе кажемся. smile

Добавлено через 56 секунд
BlackRu, кстати, а ты почему форматированием кода не занимаешься? Имею ввиду отступы хотя бы. smile 

Автор: Bulat 27.6.2014, 14:46
Цитата(ТоляМБА @  27.6.2014,  13:59 Найти цитируемый пост)
кстати, а ты почему форматированием кода не занимаешься? Имею ввиду отступы хотя бы.


Цитата(ТоляМБА @  27.6.2014,  13:59 Найти цитируемый пост)
Это же Флейм, сюда уже давно никто не заходит

 smile 

Автор: ТоляМБА 27.6.2014, 14:50
Bulat, можешь скрин своего профиля в Круглые сообщения постить  smile 

Автор: BlackRu 27.6.2014, 21:58
ТоляМБА, еще не на той стадии просветления, но уже подумываю об этом. smile
Вот в скрипте новостных заметок начал делать. Никак не могу определиться, как лучше форматировать. 
Я еще комментарии не делаю. smile Пока не делаю, так как скрипт заметок совсем минималистичный, для Android пишу. 

Автор: ТоляМБА 27.6.2014, 23:02
Цитата(BlackRu @  27.6.2014,  23:58 Найти цитируемый пост)
 Никак не могу определиться, как лучше форматировать. 
Гугли 'code conventions php'

Автор: BlackRu 27.6.2014, 23:22
ТоляМБА, спасибо, нагуглил pear.php.net/manual/ru/standards.php

Порадовала строчка:

Цитата

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)