[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Долой капчу, есть идея
Страницы: 1, 2, 3, 4, 5
Игорь_Vasinsky
Долой капчу, есть идея :D по русскому было 3 всегда.

Вспомнилось мне, как вроде бы давно, а вроде бы не давно бул у нас конкурс на защиту от ботов.

придумывали трёхмерные капчи, капчи с перетаскиванием и т.д.

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

Промаха в таком подходе за целые сутки я выявить не смог.

Сут вот какая.

есть форма авторизации


<form>
<
input id="login" name="login" type="text"/>
<
input id="pass" name="pass" type="text"/>
<
input id="key" name="key" type="text"/>
<
form>


на поле логина к примеру

<input id="login" name="login" type="text"/>


я вешаю на onchange() функцию JS которая из value логина берёт данные, кодирует ( брал несколько хешей и смешивал), и подставляет в value поля key

<input onchange="genKey()" id="login" name="login" type="text"/>


таким образом при отправки данных с формы идут поля login, pass, key


Следующим щагом проверка key на php

соот-но берётся key из формы и формируется key из логина (только уже на стороне сервера), они сравниваются.

если разные - то останавливаем обработку

если одинаковые - то ищем в БД и т.д.

------------------------------------------------
В чём именно я вижу плюсы такого подхода:

- key формируется только после того как в поле логина был снят фокус - как такое бот может реализовать - я не вкурсе, ни как наверно
key не возможно сгененировать для брутфорса, т.к. подразумевается что на JS файл обуксирован (а с сервера php не достать) и алгоритм известен тока разрабу.


минусы - придётся забыть про автозаполнение и юзеру нужно будет тока ручками вводить данные для входа


---------------------------------
в итоге не предумал ещё название такому способу, но в сети его ранее не встречал, именно в этом месте - как замену капчи



----------------

Что скажете?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
twin
Ты забываешь об одном. Бот ничего не делает в браузере. Не жмет кнопки, не убирает фокус. Он просто отправит тебе курлом кэш логина и вся недолга. Такая защита хороша на самодельных бложиках, под которые не выгодно писать ботов. А если ресурс привлекателен, то поломать такую защиту - дело 20 минут

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
glock18
Способ бородатый. Основной минус - идут лесом пользователи без js. К тому же это защита от тупого бота (коих 90%+), но есть и поумнее, а уж если человек проанализирует отправляемый запрос и js, то легко сможет научить бота подставлять нужный ключ.
kaww
Цитата (Игорь_Vasinsky @ 7.06.2013 - 07:46)
Что скажете?

Берем твой js скармливаем ему логин, под которым хотим авторизоваться. получаем валидный ключ, который вставляем в поле key. Либо еще проще: у нас ведь есть список учетных записей под которыми ходим. Один раз составляем для них ключи и в путь)
З.Ы. Зря писал. уже ответили
GET
Игорь_Vasinsky
Может я неправильно понял, но почему нельзя боту каждый раз отправлять на сервер логин и получив хэш бутфорсить или массово генерить комменты?

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Игорь_Vasinsky
Цитата
Он просто отправит тебе курлом кэш логина и вся недолга


Цитата
( брал несколько хешей и смешивал)


там не просто, там нормальный такой алгоритм и с substr и прочего

Цитата
идут лесом пользователи без js


я давно их уже послал

Цитата
Берем твой js скармливаем ему логин


кто захочет сломать - будет пытаться, но не факт

Цитата
Один раз составляем для них ключи и в путь)

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


Цитата
а уж если человек проанализирует отправляемый запрос и js


))))

Вот вам логин -
vasinsky


Вот вам хеш с него
b0b831ff19a107cab7a5


Вот алгортм хеширования на сервере, который не попадётся ни в консоле не в html

 $login = 'vasinsky';

echo substr(sha1(sha1($login).'-'.sha1(substr($login, 5,15).'_'.substr($login, 10,20))), 13,20);


Вот вам алгоритм на JS - который доступен, т.к. файл цепляется к странице

Свернутый текст
 <script type="text/javascript">
var _0xc486=["\x31\x6A\x20\x6A\x3D\x5B\x22\x5C\x73\x5C\x6E\x5C\x79\x5C\x72\x5C\x39\x5C\x7A\x5C\x65\x5C\x31\x66\x5C\x65\x5C\x44\x5C\x65\x5C\x46\x5C\x65\x5C\x46\x5C\x65\x5C\x78\x5C\x65\x5C\x31\x32\x5C\x65\x5C\x31\x39\x5C\x65\x5C\x78\x5C\x65\x5C\x4F\x5C\x65\x5C\x46\x5C\x65\x5C\x31\x36\x5C\x65\x5C\x55\x5C\x7A\x5C\x66\x5C\x7A\x5C\x65\x5C\x31\x35\x5C\x7A\x5C\x66\x5C\x7A\x5C\x65\x5C\x56\x5C\x65\x5C\x45\x5C\x7A\x5C\x61\x5C\x6B\x5C\x73\x5C\x6E\x5C\x76\x5C\x72\x5C\x39\x5C\x79\x5C\x39\x5C\x64\x5C\x61\x5C\x66\x5C\x79\x5C\x39\x5C\x6C\x5C\x61\x5C\x66\x5C\x79\x5C\x39\x5C\x68\x5C\x61\x5C\x61\x5C\x6B\x5C\x73\x5C\x6E\x5C\x43\x5C\x72\x5C\x39\x5C\x76\x5C\x39\x5C\x64\x5C\x61\x5C\x66\x5C\x76\x5C\x39\x5C\x6C\x5C\x61\x5C\x66\x5C\x76\x5C\x39\x5C\x68\x5C\x61\x5C\x61\x5C\x6B\x5C\x73\x5C\x6E\x5C\x67\x5C\x72\x5C\x39\x5C\x43\x5C\x39\x5C\x64\x5C\x61\x5C\x66\x5C\x43\x5C\x39\x5C\x6C\x5C\x61\x5C\x66\x5C\x43\x5C\x39\x5C\x68\x5C\x61\x5C\x61\x5C\x6B\x5C\x73\x5C\x6E\x5C\x70\x5C\x72\x5C\x39\x5C\x67\x5C\x39\x5C\x64\x5C\x61\x5C\x66\x5C\x67\x5C\x39\x5C\x6C\x5C\x61\x5C\x66\x5C\x67\x5C\x39\x5C\x68\x5C\x61\x5C\x61\x5C\x6B\x5C\x73\x5C\x6E\x5C\x77\x5C\x72\x5C\x39\x5C\x70\x5C\x39\x5C\x64\x5C\x61\x5C\x66\x5C\x70\x5C\x39\x5C\x6C\x5C\x61\x5C\x66\x5C\x70\x5C\x39\x5C\x68\x5C\x61\x5C\x61\x5C\x6B\x5C\x73\x5C\x6E\x5C\x6F\x5C\x72\x5C\x39\x5C\x77\x5C\x39\x5C\x64\x5C\x61\x5C\x66\x5C\x77\x5C\x39\x5C\x6C\x5C\x61\x5C\x66\x5C\x77\x5C\x39\x5C\x68\x5C\x61\x5C\x61\x5C\x6B\x5C\x73\x5C\x6E\x5C\x6D\x5C\x72\x5C\x39\x5C\x6F\x5C\x39\x5C\x64\x5C\x61\x5C\x66\x5C\x6F\x5C\x39\x5C\x6C\x5C\x61\x5C\x66\x5C\x6F\x5C\x39\x5C\x68\x5C\x61\x5C\x61\x5C\x6B\x5C\x73\x5C\x6E\x5C\x74\x5C\x72\x5C\x6D\x5C\x39\x5C\x64\x5C\x61\x5C\x6B\x5C\x4E\x5C\x6E\x5C\x4A\x5C\x4D\x5C\x75\x5C\x4C\x5C\x31\x37\x5C\x53\x5C\x4D\x5C\x75\x5C\x50\x5C\x6D\x5C\x39\x5C\x6C\x5C\x61\x5C\x50\x5C\x74\x5C\x4C\x5C\x31\x34\x5C\x6B\x5C\x4A\x5C\x4D\x5C\x6D\x5C\x39\x5C\x68\x5C\x61\x5C\x4C\x5C\x6B\x22\x2C\x22\x5C\x62\x22\x2C\x22\x5C\x4E\x5C\x53\x5C\x44\x5C\x4F\x5C\x4B\x22\x2C\x22\x5C\x62\x5C\x62\x5C\x62\x5C\x31\x38\x5C\x74\x5C\x45\x5C\x62\x5C\x71\x5C\x64\x5C\x63\x5C\x68\x5C\x67\x5C\x68\x5C\x75\x5C\x62\x5C\x71\x5C\x64\x5C\x63\x5C\x76\x5C\x67\x5C\x6F\x5C\x75\x5C\x62\x5C\x71\x5C\x64\x5C\x63\x5C\x75\x5C\x67\x5C\x6D\x5C\x6C\x5C\x62\x5C\x71\x5C\x64\x5C\x63\x5C\x75\x5C\x76\x5C\x6D\x5C\x78\x5C\x62\x5C\x71\x5C\x64\x5C\x63\x5C\x76\x5C\x64\x5C\x6F\x5C\x74\x5C\x62\x5C\x71\x5C\x64\x5C\x63\x5C\x6F\x5C\x64\x5C\x67\x5C\x46\x5C\x62\x5C\x62\x5C\x71\x5C\x64\x5C\x63\x5C\x67\x5C\x70\x5C\x67\x5C\x67\x5C\x62\x5C\x71\x5C\x64\x5C\x63\x5C\x74\x5C\x76\x5C\x79\x5C\x6C\x5C\x62\x5C\x63\x5C\x70\x5C\x31\x61\x5C\x62\x5C\x63\x5C\x70\x5C\x31\x30\x5C\x62\x5C\x71\x5C\x64\x5C\x63\x5C\x6F\x5C\x6D\x5C\x6D\x5C\x75\x5C\x63\x5C\x74\x5C\x62\x5C\x31\x68\x5C\x4E\x5C\x4A\x5C\x58\x5C\x56\x5C\x63\x5C\x62\x5C\x63\x5C\x70\x5C\x77\x5C\x62\x5C\x63\x5C\x67\x5C\x68\x5C\x62\x5C\x63\x5C\x6F\x5C\x67\x5C\x62\x5C\x63\x5C\x77\x5C\x79\x5C\x62\x5C\x63\x5C\x70\x5C\x6F\x5C\x62\x5C\x63\x5C\x68\x5C\x64\x5C\x62\x5C\x63\x5C\x68\x5C\x6C\x5C\x62\x5C\x63\x5C\x77\x5C\x31\x30\x5C\x62\x5C\x74\x5C\x44\x5C\x78\x5C\x45\x5C\x4B\x5C\x62\x5C\x63\x5C\x64\x5C\x31\x65\x5C\x62\x5C\x63\x5C\x77\x5C\x58\x5C\x62\x5C\x75\x5C\x31\x69\x5C\x55\x5C\x6D\x5C\x4B\x5C\x4F\x5C\x56\x5C\x55\x22\x2C\x22\x5C\x45\x5C\x78\x5C\x53\x5C\x44\x5C\x74\x5C\x6D\x5C\x78\x22\x2C\x22\x22\x2C\x22\x5C\x65\x5C\x31\x64\x5C\x50\x22\x2C\x22\x5C\x65\x5C\x43\x22\x2C\x22\x5C\x4A\x22\x5D\x3B\x31\x63\x28\x47\x28\x49\x2C\x54\x2C\x69\x2C\x42\x2C\x41\x2C\x52\x29\x7B\x41\x3D\x47\x28\x69\x29\x7B\x48\x20\x69\x2E\x51\x28\x31\x62\x29\x7D\x3B\x57\x28\x21\x6A\x5B\x35\x5D\x5B\x6A\x5B\x34\x5D\x5D\x28\x2F\x5E\x2F\x2C\x31\x67\x29\x29\x7B\x59\x28\x69\x2D\x2D\x29\x7B\x52\x5B\x69\x2E\x51\x28\x54\x29\x5D\x3D\x42\x5B\x69\x5D\x7C\x7C\x69\x2E\x51\x28\x54\x29\x7D\x3B\x42\x3D\x5B\x47\x28\x41\x29\x7B\x48\x20\x52\x5B\x41\x5D\x7D\x5D\x3B\x41\x3D\x47\x28\x29\x7B\x48\x20\x6A\x5B\x36\x5D\x7D\x3B\x69\x3D\x31\x7D\x3B\x59\x28\x69\x2D\x2D\x29\x7B\x57\x28\x42\x5B\x69\x5D\x29\x7B\x49\x3D\x49\x5B\x6A\x5B\x34\x5D\x5D\x28\x31\x31\x20\x31\x33\x28\x6A\x5B\x37\x5D\x2B\x41\x28\x69\x29\x2B\x6A\x5B\x37\x5D\x2C\x6A\x5B\x38\x5D\x29\x2C\x42\x5B\x69\x5D\x29\x7D\x7D\x3B\x48\x20\x49\x7D\x28\x6A\x5B\x30\x5D\x2C\x5A\x2C\x5A\x2C\x6A\x5B\x33\x5D\x5B\x6A\x5B\x32\x5D\x5D\x28\x6A\x5B\x31\x5D\x29\x2C\x30\x2C\x7B\x7D\x29\x29\x3B","\x7C","\x73\x70\x6C\x69\x74","\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x78\x35\x42\x7C\x78\x35\x44\x7C\x78\x37\x43\x7C\x78\x37\x38\x7C\x78\x33\x30\x7C\x78\x35\x43\x7C\x78\x32\x43\x7C\x78\x33\x37\x7C\x78\x33\x32\x7C\x5F\x30\x78\x66\x34\x61\x61\x78\x33\x7C\x5F\x30\x78\x38\x61\x33\x63\x7C\x78\x33\x42\x7C\x78\x33\x31\x7C\x78\x36\x33\x7C\x78\x32\x30\x7C\x78\x33\x35\x7C\x78\x33\x36\x7C\x78\x35\x46\x7C\x78\x33\x44\x7C\x78\x33\x33\x7C\x78\x36\x31\x7C\x78\x36\x36\x7C\x78\x33\x39\x7C\x78\x33\x34\x7C\x78\x36\x35\x7C\x78\x33\x38\x7C\x78\x32\x32\x7C\x5F\x30\x78\x66\x34\x61\x61\x78\x35\x7C\x5F\x30\x78\x66\x34\x61\x61\x78\x34\x7C\x78\x36\x32\x7C\x78\x36\x43\x7C\x78\x37\x32\x7C\x78\x36\x34\x7C\x66\x75\x6E\x63\x74\x69\x6F\x6E\x7C\x72\x65\x74\x75\x72\x6E\x7C\x5F\x30\x78\x66\x34\x61\x61\x78\x31\x7C\x78\x36\x37\x7C\x78\x37\x34\x7C\x78\x32\x39\x7C\x78\x32\x38\x7C\x78\x37\x33\x7C\x78\x36\x39\x7C\x78\x32\x42\x7C\x74\x6F\x53\x74\x72\x69\x6E\x67\x7C\x5F\x30\x78\x66\x34\x61\x61\x78\x36\x7C\x78\x37\x30\x7C\x5F\x30\x78\x66\x34\x61\x61\x78\x32\x7C\x78\x36\x45\x7C\x78\x36\x46\x7C\x69\x66\x7C\x78\x34\x32\x7C\x77\x68\x69\x6C\x65\x7C\x32\x39\x7C\x78\x34\x36\x7C\x6E\x65\x77\x7C\x78\x36\x44\x7C\x52\x65\x67\x45\x78\x70\x7C\x78\x37\x44\x7C\x78\x37\x31\x7C\x78\x36\x38\x7C\x78\x37\x42\x7C\x78\x37\x36\x7C\x78\x36\x41\x7C\x78\x34\x33\x7C\x33\x36\x7C\x65\x76\x61\x6C\x7C\x78\x37\x37\x7C\x78\x34\x31\x7C\x78\x36\x42\x7C\x53\x74\x72\x69\x6E\x67\x7C\x78\x34\x44\x7C\x78\x37\x35\x7C\x76\x61\x72","","\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65","\x72\x65\x70\x6C\x61\x63\x65","\x5C\x77\x2B","\x5C\x62","\x67"];eval(function (_0x9ca8x1,_0x9ca8x2,_0x9ca8x3,_0x9ca8x4,_0x9ca8x5,_0x9ca8x6){_0x9ca8x5=function (_0x9ca8x3){return (_0x9ca8x3<_0x9ca8x2?_0xc486[4]:_0x9ca8x5(parseInt(_0x9ca8x3/_0x9ca8x2)))+((_0x9ca8x3=_0x9ca8x3%_0x9ca8x2)>35?String[_0xc486[5]](_0x9ca8x3+29):_0x9ca8x3.toString(36));} ;if(!_0xc486[4][_0xc486[6]](/^/,String)){while(_0x9ca8x3--){_0x9ca8x6[_0x9ca8x5(_0x9ca8x3)]=_0x9ca8x4[_0x9ca8x3]||_0x9ca8x5(_0x9ca8x3);} ;_0x9ca8x4=[function (_0x9ca8x5){return _0x9ca8x6[_0x9ca8x5];} ];_0x9ca8x5=function (){return _0xc486[7];} ;_0x9ca8x3=1;} ;while(_0x9ca8x3--){if(_0x9ca8x4[_0x9ca8x3]){_0x9ca8x1=_0x9ca8x1[_0xc486[6]]( new RegExp(_0xc486[8]+_0x9ca8x5(_0x9ca8x3)+_0xc486[8],_0xc486[9]),_0x9ca8x4[_0x9ca8x3]);} ;} ;return _0x9ca8x1;} (_0xc486[0],62,82,_0xc486[3][_0xc486[2]](_0xc486[1]),0,{}));
</
script>



По сути чтобы получить алгоритм получения хеша - достаточно раскодировать JS


кто покажет исходный код JS ?

никто. победа.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.