LINUX.ORG.RU

Хочу сделать регистрацию без email, посоветуйте вычислительную задачку для браузера

 


3

1

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

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

Поэтому возникла идея поставить капчу позже, а сначала попросить юзера доказать, что он выдержал некий proof-of-time алгоритм (и возможно proof-of-memory с микрокодом типа как в RandomX, но похрен). Proof-of-time - это, короче, пруф того, что ты регался не менее 5 секунд. Реализуется как 5 обменов с браузерным JS, между которыми не может быть менее секунды, причём сервер не утруждает себя хранением состояния, чтобы выдерживать SYN-flood-атаки (запустили регистрацию 100500 раз и свалили).

Посылаем браузеру структуру данных, с прошитым в ней миллисекундным timestamp, изменить который без разрушения структуры невозможно, просим прислать нам структуру обратно через секунду и забываем про факт посылки. Когда через секунду браузер присылает эту структуру назад, мы смотрим на прошитый в ней timestamp и понимаем, прошло ли достаточно времени для её возврата нам или юзер читерит. Далее генерим аналогичную структуру для второго состояния и так далее, пока не получим возврат на последнюю посылку. То есть, нужен алгоритм генерации такой структуры данных, валидность которой наступает в будущем.

На экране юзера такая регистрация будет выглядеть как прогресс-бар, который тупо доходит до 100% за 5 секунд.

Простейший вариант - тупо зашифровать своим секретным ключом AES128 строчку вида <256-bit-random-salt> и на входе расшифровывать обратно, сверяя timestamp. Но может есть чё попроще или наоборот поумнее, понадёжнее или «так же надёжно, но вычислительно сильно дешевле»?

А ещё были такие идеи на тему proof-of-memory: генерим на сервере 512 байт данных и запоминаем, а юзеру отправляем 1 МБ, где в случайных местах замешаны эти 512 байт. Потом посылаем юзеру 10 запросов в рандомные места этого 1 МБ куска, ответы на большинство из которых нас не волнуют. Пара запросов, которые попадают в «наши данные» мы проверяем, но юзер вынужден помнить весь 1 МБ, не зная где среди них лежат наши данные. Потом я прочитал про RandomX и понял, что это содомия, а нормальные чуваки просто генерят какой-то псевдомашинный код на тему перемещения блоков в памяти, который (код) юзер физически состоянии исполнить только имея, скажем, 4 гига оперативы - короче надо ещё про это почитать! Жаба конечно задушит каждому дебилу по 1 МБ рассылать. Нужно, чтобы псевдокод для исполнения у жертвы не мог вернуть верный результат без использования настоящих 16 мегабайт памяти, но чтобы результат работы кода был мизерным и был известен серверу прямо в момент генерации этого рандомного дьявольского псевдокода.



Последнее исправление: igloev (всего исправлений: 4)

Ответ на: комментарий от kostyarin_

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

igloev
() автор топика
Ответ на: комментарий от invy

Я наврал. Потенциально сайтик огромен.

igloev
() автор топика
Ответ на: комментарий от invy

А просто разрешать регистрацию раз в десять секунд, не? if(currenttine - lastregistrationtime < 10) return error(«please wait some time»);

Чтобы можно было простым скриптом в одно рыло DoS организовать, забивая очередь запросами?

anonymous
()
Ответ на: комментарий от igloev

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

Да, я тоже не в восторге от email-ов всяких и прочего. Обычно это решается через «авторизацию через %». Типа через гугл акк входишь или через facebook. И почта не нужна. Но это тоже т.н. «второй сервис», который тоже и спамит и следит.

Что касается роботов, то тут вопрос скорее в ссылках. На простых сайтах, без целенаправленного взлома, роботы обычно ходят и постят свои сообщения со ссылками во всех формах, что им встречаются. Причём не осбо напрягаясь при этом. Когда сообщения со ссылками запрещены, то роботы не смогу наспамить. Это из личного опыта.

А регистрация – так ли это важно робот или нет? Ресурс выжрет? От тупых роботов и простейшая капча спасёт. От сложных – получится что-то типа reCapcha по сложности. Хотя я склонен полагать, что «сложные» – это целенаправленный взлом – а маленькому сайт он не страшен.

kostyarin_ ★★
()
Ответ на: комментарий от kostyarin_

А регистрация – так ли это важно робот или нет?

Ну на самом деле не особо, но всё же если ресурс про общение (как тут), то зачем в базе полляма странных регистраций.

igloev
() автор топика
Ответ на: комментарий от romanlinux

recaptcha

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

igloev
() автор топика
Ответ на: комментарий от igloev

Преимущество:

  1. Не нужно делать свой генератор и заморачиваться с ним
  2. Пользователю проще поставить галочку в гугл капче, чем ввозить буквы по кракозябрам из капчи-сделай-сам
  3. Гарантированная работа капчи(это же гугл)
romanlinux ★★★
()
Ответ на: комментарий от romanlinux

Не нужно делать свой генератор и заморачиваться с ним

Уже сделано, писали же. Во-вторых зависимость от внешнего сервиса и лишних 200 миллисек в интерфейсе на ожидание этих говен. Ну у нас тоже гарантировнная, если весь сает не прилёг.

igloev
() автор топика
Ответ на: комментарий от anonymous

майнер-малваль делаешь, так и говори

Рот крутил этих ваших майнеров малварей поганой метлой в гробу.

igloev
() автор топика
Ответ на: комментарий от grem

Ага. Именно так и надо. Либо безопасность и приватность, либо восстановление доступа всеми желающими. Оно не бывает и то и то.

peregrine ★★★★★
()
Ответ на: комментарий от romanlinux

Пользователю проще поставить галочку в гугл капче

Чтоб ты здох с такой философией.

anonymous
()
Ответ на: комментарий от anonymous

Неуловимый джо )

Ну так добавить список ip. Пять попыток с одного ip -> пять минут для ip «бана» и т.п.

invy ★★★★★
()
Ответ на: комментарий от peregrine

Понятно: у него ресурс для юных хакеров. Как всё запущено.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от romanlinux

Я один раз на конференции наблюдал, как приехавший из другой страны человек 15 минут непрерывно тыкал галочки. Но его всё равно не пускало. Наверное, он слишком быстро это делал.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от grem

Скорее fingerprint его ПК был отмечен как сомнительный….

Скорость нажатия галочки не причем. Там суть в зажимании клавиши, потому что например document.querySelect(‘a’).click() отрабатывает за 0 мсек. А человеческий клик чуть дольше, потому что мы как бы придерживаем кнопку во время нажатия

romanlinux ★★★
()
Ответ на: комментарий от romanlinux

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

grem ★★★★★
()

Поэтому возникла идея поставить капчу позже, а сначала попросить юзера доказать, что он выдержал некий proof-of-time алгоритм (и возможно proof-of-memory с микрокодом типа как в RandomX, но похрен). Proof-of-time - это, короче, пруф того, что ты регался не менее 5 секунд. Реализуется как 5 обменов с браузерным JS, между которыми не может быть менее секунды, причём сервер не утруждает себя хранением состояния, чтобы выдерживать SYN-flood-атаки (запустили регистрацию 100500 раз и свалили).

Это бессмысленно, спамер может в тысячу потоков зарегать тысячу пользователей за те же ~5 секунд.

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

Текстовые капчи решаются нейронками изи. Те что не решаются нейронками - решаются индусами за пол копейки.

fulmar_lor
()
Ответ на: комментарий от invy

Ну так добавить список ip. Пять попыток с одного ip -> пять минут для ip «бана» и т.п.

Везде так и реализовано, но от спамеров это не сильно поможет, потому что долбят всегда через прокси (с разных IP).

anonymous
()
Ответ на: комментарий от fulmar_lor

Это бессмысленно, спамер может в тысячу потоков зарегать тысячу пользователей за те же ~5 секунд.

В этои и смысл, чтобы атакующему было жить дороже и сложнее, чем самому сервису - трахаться с потоками, тратить память на это и т.п. Да и чтобы зарегаться, надо разгадать капчу. Ну и лимит на 1 рега с одного IP в 10 минут, например.

Текстовые капчи решаются нейронками изи.

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

igloev
() автор топика
Ответ на: комментарий от V1KT0P

Достаточно простой игры требующей 10-15 минут времени на прохождение

Да этим говносайтом никто пользоваться не будет

anonymous
()
Ответ на: комментарий от igloev

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

mertvoprog
()
Ответ на: комментарий от igloev

1000 потоков это не затраты

Заставь браузер расшифровывать RSA-16384 от рандомных данных + солёного хеша. Таймер ставить не надо, всё равно быстро он это не сделает. Если опасаешься атак на серверную нагрузку проца - можно сделать несколько итераций, сначала RSA-512 например, потом RSA-1024 итд. (первый шаг отбросит тех кто не собирался ничего расшифровывать а просто шлёт флуд-запросы). От флуда на RSA-512 придтся защищаться уже фильтрами по ip - от этого никуда не деться.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от anonymous

Да ладно, засунуть в бота Антидемидовича — нефиг делать ;)

mertvoprog
()
Ответ на: комментарий от invy

Если делать для всех IP сразу, то спамеры забьют все таймфреймы, а легитимные юзеры не смогут пробиться.

А для одного IP не имеет смысла, боты могут долбить сразу с кучи разных, особенно если это IPv6.

mertvoprog
()
Ответ на: комментарий от romanlinux

Рекапча не только галочку поставить может заставить, но и послать выискивать на картинках апельсины брандсбойты, вынуждая пользователя безуспешно гадать, является ли столбик от светофора частью светофора, перила от лестницы — частью лестницы, а нарисованный на дороге велосипед — велосипедом, или нет. Со многих браузеров она вообще непроходима, в отличие от капч тупо картинкой. Равно как и с зашкваренных IP или после n неудачных попыток может вообще послать нахрен и непущать.

mertvoprog
()
Ответ на: комментарий от igloev

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

И где тут a11y?

mertvoprog
()

Вот не понимаю я таких веб-ломастеров. Зачем какая-то js-хрень? Зачем лишние проблемы пользователям? У тебя их что, миллион с гаком, а сервер выдерживает только пол ляма, и половину надо отсеять? Или наоборот привлечь? Сделай нормальную регистрацию с самой простой текстовой капчей или даже вообще без неё и по мере возникновения проблем будешь их решать. Сейчас твоя главная проблема — отсутствие сервиса и пользователей на нём. Вот на ней и сосредоточься. А спамерам ты на фиг не нужен, пока у тебя не зарегано 100500 пользователей и/или пока ты не попадаешь на 1-ую страницу гугло-выдачи.

aureliano15 ★★
()
Ответ на: комментарий от mertvoprog

Это зависит от сложности капчи. Там можно настроить уровень «кипиша капчи» и можно поставить уровень только галочка, без картинок, всегда

romanlinux ★★★
()
Ответ на: комментарий от aureliano15

Зачем какая-то js-хрень? Зачем лишние проблемы пользователям?

У пользователей нет проблем. Наоборот меньше телодвижений (поход в мыло) и меньше нагрузка на генератор капчи. Дальше нечетал.

igloev
() автор топика
Ответ на: комментарий от igloev

Зачем какая-то js-хрень? Зачем лишние проблемы пользователям?

У пользователей нет проблем.

Как так нет? А запуск какой-то непонятной обфусцированной js фигни, которая грузит процессор и вполне может оказаться трояном или скриптом для майнинга (пользователь ведь не знает, что у тебя на уме) — это не проблема? А если не только пользователю, но и аддону NoScript эта фигня не понравится, и он её отключит, то зарегаться будет вообще невозможно. И пользователю, чтобы зарегаться, придётся явно разрешать эту фигню. Как думаешь, он разрешит её выполнение на каком-то нонеймном сайте или просто пройдёт мимо, обматерив про себя создателей сайта?

Наоборот меньше телодвижений (поход в мыло)

А я и не советовал регистрировать через мыло. Это во многих случаях тоже лишнее. Приходится создавать ненужные одноразовые е-мэйлы и тратить время.

и меньше нагрузка на генератор капчи.

А вот это уже больше твоя проблема, чем проблема пользователя. И не такая уж великая проблема, на самом деле. Хотя можно и совсем без капчи. Вот когда набегут спамеры, тогда и подключишь. Но я подозреваю, что это произойдёт не скоро, если вообще произойдёт.

Дальше нечетал.

Это как угодно. Моё дело посоветовать, твоё — не читать.

aureliano15 ★★
()
Ответ на: комментарий от aureliano15

А запуск какой-то непонятной обфусцированной js фигни, которая грузит процессор и вполне может оказаться трояном или скриптом для майнинга (пользователь ведь не знает, что у тебя на уме) — это не проблема?

Не, не проблема. Я ж говорю: прогрессбар на 5 сек и всё. Если всё описанные тобой ужасы занимают всего 5 сек, то это приемлимо 100% людей в мире, пусть скрипт хоть дьявола там вызывает.

igloev
() автор топика
Ответ на: комментарий от aureliano15

Вот когда набегут спамеры, тогда и подключишь.

У меня хватает знакомых приколистов, которые из принципа сразу же напишут скриптину для засирания мне базы говном. Вот хотя-бы ради них. А не давать им ссылку не могу - кинуть понт перед ними, что мол они ничего не добились, а я вот сделал, надо.

igloev
() автор топика
Ответ на: комментарий от aureliano15

А если не только пользователю, но и аддону NoScript эта фигня не понравится, и он её отключит, то зарегаться будет вообще невозможно.

Эти скучные сутулые жадные фрики меня мало волнуют, у них не платящая психология.

igloev
() автор топика
Ответ на: комментарий от igloev

У меня хватает знакомых приколистов, которые из принципа сразу же напишут скриптину для засирания

Зачем с такими водиться?

А не давать им ссылку не могу - кинуть понт перед ними

Тяжёлая у тебя жизнь. Мой добрый совет: не кидай понты перед свиньями, а лучше живи и работай в своё удовольствие.

аддону NoScript эта фигня не понравится

фрики меня мало волнуют, у них не платящая психология.

Т. е. люди, которые защищаются от атак из сети и от чересчур навязчивых js — фрики? Но если под не фриками с «платящей психологией» подразумеваются лохи, которые вообще не защищаются, и которых надо развести, то да, разумнее всего отсеять тех, кого развести всё равно не получится.

aureliano15 ★★
()
Ответ на: комментарий от aureliano15

Короче JS есть у всех. Если ты его отключил, то следующий шаг - рубануть себе электричество и воду.

igloev
() автор топика
Ответ на: комментарий от igloev

Во-первых, некоторые его отключают. И таких не так мало, как тебе может показаться. Во-вторых, упомянутый мною NoScript не отключает js совсем, как ты мог подумать, а отключает только разную непонятную фигню на мутных сайтах. Но твой обфусцированный код непонятного назначения может как раз попасть в список этой самой непонятной фигни. Вообще, на мой взгляд, и сайты, и другое ПО надо делать максимально просто, легко и универсально, предполагая возможность наличия у пользователя самого старого и слабого компа и маргинального устаревшего браузера с любыми отключенными функциями. Разумеется, тестить сайт на всех неизвестных браузерах 20-летней давности — перебор. Но если с самого начала понятно, что что-то где-то возможно не будет работать, и без этого чего-то вполне можно обойтись, то и не нужно его добавлять. В крайнем случае, можно добавить в качестве фичи, чтоб у тех, у кого оно работает, всё было супер, а у остальных — просто работало. В качестве примеров могу привести ЛОР и Википедию. Попробуй отключить на этих сайтах js и увидишь, что хоть некоторые приблуды исчезли, основной функционал не пострадал. Но это моё имхо. Разумеется, ты можешь считать иначе и делать, как считаешь. Я просто дал совет, а прислушиваться к нему или нет — дело твоё.

aureliano15 ★★
()
Ответ на: комментарий от aureliano15

Во-первых, некоторые его отключают. И таких не так мало, как тебе может показаться.

Очень мало.

NoScript

Не нужно.

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

На стандартной поставке ubuntu 16.04 работает - значит норм, а плюшкины-барахольщики с 100500 каких-то левых плагинов мало кого волнуют.

Я просто дал совет,

Так не бывает, за свои слова надо держать ответ. А совет херовый, просьба извиниться или оправдаться.

igloev
() автор топика
Ответ на: комментарий от romanlinux

только галочка, без картинок

Есть браузеры, в которых оно заставляет перекопипастить рандомный текст в поле. Причём реализовано оно отловом JS-событий, так что если они не работают — один хрен не пропустит.

mertvoprog
()
Ответ на: комментарий от igloev

поход в мыло

А не надо в него «ходить», почту должен получать локальный почтовый клиент в фоне (причём в 2$21-м по возможности по IMAP PUSH, если батарею остро экономить не надо). Иначе это уже не почта, а SaaS какой-то: сегодня есть, завтра забанят и почту отнимут.

mertvoprog
()
Ответ на: комментарий от aureliano15

Википедию

Плохой пример, там https-фашизм давно.

Да и на ЛОРе уже тоже.

Это куда хуже, чем какая-то завязка на скриптах (с другой стороны, обходится элементарно через другую машину ;)).

mertvoprog
()
Ответ на: комментарий от mertvoprog

Википедию

Плохой пример, там https-фашизм давно.

Что такое «https-фашизм»? Отсутствие http? Но, во-первых, то же самое на большинстве сайтов. Во-вторых, там, где есть логин/пароль или другая передача конфиденциальных данных, https объективно необходим. И в-третьих, почему это плохо, даже когда острой необходимости в шифровании нет?

обходится элементарно через другую машину

Что обходится?

aureliano15 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.