Почему можно определить существует ли аккаунт даже при наличии CAPTCHA

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

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

Начнем с базы.

Любая авторизация работает примерно так:
- пользователь отправляет данные
- сервер их обрабатывает
- возвращает ответ

Но внутри есть важный момент:
сервер заранее понимает, существует пользователь или нет.
​​

Теперь к самому интересному - разберем это на простом примере.

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

Первое, что мы видим, при попытке авторизоваться, reCAPTCHA 3
Убеждаемся в этом, открыв DevTools(F12) -> Network


После авторизации в новом аккаунте можно заметить, что сайт устанавливает нам cookies


На этом этапе видно, что в cookies передаются login и auth (в hex-формате).
Берем эти куки и переходим в нашу IDE посмотреть, как сайт будет реагировать на наши куки с браузера, просто передав их с GET-запросом.

import httpx

cookies = {
'login': 'faslkfaklsfd',
'auth': '2e134b4561c5d2e041845ab57b278ebd'
}
res = httpx.get('https://my.pwclassic.ru/index.php', cookies=cookies)
print(res.headers['Set-Cookie'])

Python

Код:
import httpx

cookies = {
    'login': 'faslkfaklsfd',
    'auth': '2e134b4561c5d2e041845ab57b278ebd'
}
res = httpx.get('https://my.pwclassic.ru/index.php', cookies=cookies)
print(res.headers['Set-Cookie'])


В ответе получаем, что наш login становится deleted, идентично вместе с auth.
Возьмем любой другой login и этот же auth, посмотрим, что из этого выйдет.


Нам выдало ошибку, что параметра Set-Cookie не существует в полученных headers.

В первом случае мы получили:

Set-Cookie: login=deleted;
Set-Cookie: auth=deleted;

Код

Код:
Set-Cookie: login=deleted;
Set-Cookie: auth=deleted;
То есть сервер явно сбрасывает cookies.

Во втором случае (когда подставили другой login) - в ответе вообще нет Set-Cookie.

Получается интересная картина:
при одних данных сервер сбрасывает cookies
при других - вообще не трогает их

Хотя с точки зрения интерфейса - разницы никакой не видно

Какая в этом логика?

Если упростить, то сервер делает примерно следующее:

if пользователь_существует:
сбросить cookies
else:
ничего не делать

Python

Код:
if пользователь_существует:
    сбросить cookies
else:
    ничего не делать
За счет этого можно сделать простой вывод:
если сервер возвращает Set-Cookie: deleted -> одно состояние
если не возвращает -> другое состояние

Сайт сам дает сигнал существует аккаунт или нет

​​

Отдельный момент - reCAPTCHA.

Многие считают, что ее наличие решает проблему, но на практике:
- она проверяет, что запрос отправляет человек
- но не влияет на дальнейшую обработку

Если запрос прошел - вся логика (включая различия) остается как есть.​​

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

И все это происходит без прямого взаимодействия с формой авторизации.​​

Со стороны разработчика решение достаточно простое:
- делать одинаковые ответы в любых случаях
- унифицировать работу с cookies
- не оставлять различий в заголовках
- добавлять rate limit

Главное правило - сервер не должен давать понять, существует аккаунт или нет​​

В итоге получаем довольно типичную ситуацию:

- снаружи есть защита (капча, антибот и т.д.)
- внутри - логика работает по-разному

И именно такие мелкие различия чаще всего и становятся причиной утечек.​​

Комментарии 0

Пока нет комментариев. Начните обсуждение.
Войдите, чтобы оставить комментарий.
Назад
Верх