7.3 KiB
7.3 KiB
Habr / vc.ru / dev.to авторег и OAuth-стены (разведка 2026-10-03)
Цель была: аккаунты на контент-площадках для кросс-постинга статей @AlStack. Итог: все три площадки заблокированы для автомата с домашнего IP. Фиксирую ТОЧНЫЕ механизмы стен и что из флоу всё-таки работает — чтобы не повторять разведку.
1. GitHub OAuth через чистый urllib — РАБОТАЕТ (техника)
Полный флоу без браузера, проверен на Habr и dev.to (логин+2FA проходят):
GET {site}/login→ найти extidp-форму (data-form="extidp"),POSTеё action → JSON с redirect наgithub.com/login/oauth/authorize?client_id=...&state=....- Парсинг hidden-инпутов: порядок атрибутов произвольный — regex только по
name="authenticity_token" value="..."ЛОМАЕТСЯ. Парсить все<input type="hidden" ...>целиком, потом вытаскивать name/value из каждого. - GitHub login:
POST /session(login, password, authenticity_token, trusted_device). Если акк с 2FA → редирект на/sessions/two-factor. - 2FA: form
POST /sessions/two-factor, поляapp_otp(6 цифр из pyotp по seed) +authenticity_token. Признак успеха: 200 наhttps://github.com/+ flash «You signed in with another tab or window». Ошибкаhttp=422на two-factor = неверный/просроченный токен формы — перечитать страницу. - Authorize:
POST /login/oauth/authorizeс кнопкойname="authorize" value="0"+ ВСЕ hidden-поля (client_id, state, scope, redirect_uri). - КРИТИЧНО — meta-refresh: ответ authorize = 200 с
<meta http-equiv="refresh" content="0;url=...callback?code=***&iss=...">. urllib НЕ следует meta-refresh. regex:r'<meta[^>]*refresh[^>]*url=([^\s">]+)'+.replace("\\u0026","&").replace("\\/","/")+ html.unescape. Потом GET callback руками с теми же cookies. - JSON-ответы extidp могут содержать экранированный URL в произвольном ключе — перебирать
("redirect","url","redirect_uri","href","location")+ regex-фолбэкr'https://github\.com[^"\\]*'поjson.dumps(d).
Скрипты-референсы: C:/Users/User/tmp/habr_gh_login.py, devto_gh_login.py, debug_gh_2fa.py. Пул GH-акков с TOTP: tmp/hoplite-gateway/data/gh_accounts.json (172 шт).
2. Habr — ЗАМКНУТЫЙ КРУГ (не биться)
- Регистрация: форма
account.habr.com/ru/register/start/{csrf}(поля email/nickname/password1/password2/agree/cplcy). Ответ:{"success":false,"errors":{"smart-token":"Необходимо пройти капчу"}}— Yandex SmartCaptcha. - YesCaptcha НЕ решает:
AntiYandexSmartCaptchaTaskProxyless,AntiYandexCaptchaTaskProxyless,YandexSmartCaptchaTaskProxyless— все триERROR_TASK_NOT_SUPPORTED. (Баланс YesCaptcha живой, ключ вDesktop/_PROJECTS/авторег проект/.env, переменнаяYESCAPTCHA_KEY.) - Camoufox-браузер: виджет smartcaptcha рендерится, но токен не генерится headless, submit-кнопка disabled навсегда.
- Главная ловушка: GitHub OAuth логин проходит ПОЛНОСТЬЮ (п.1), но callback
account.habr.com/extidp/github/check?code=***= 403 — Habr линкует OAuth только к УЖЕ существующему аккаунту. Т.е. OAuth-путь не создаёт аккаунт, а регистрация без OAuth упирается в SmartCaptcha. Замкнутый круг. client_id Habr OAuth:8a8c881ecaaa3b5d9ca4. Cookies после OAuth:PHPSESSID, fl, habrsession_id, hl, hsec_id, oas, qrator_msid2(7 шт) — сессия есть, аккаунта нет.
3. vc.ru — API-хост недоступен с домашнего IP
- Реверс бандла
vc.ru/assets/index-*.js(1.4MB): auth = passwordless email-code.POST https://api.vc.ru/v3.4/auth/email/code {email}→ challengeId → код из письма →POST .../email/code/confirm {challengeId, code}. Есть также/yandex-auth. - Стена:
api.vc.ru(Yandex Cloud IP) — TCP timeout с нашего IP (curl http=000 time=21s), при этом основнойvc.ruотвечает 200. Обход через основной домен не работает:POST vc.ru/api/v3.4/...= 404 «Route not found». - Вывод: нужен резидентный/мобильный прокси без блока Yandex Cloud. Voidash-почты для кода подходят (домен не в блэклисте — проверял email/code до таймаута).
4. dev.to — state mismatch на callback (не жечь GH-пул)
- OAuth:
GET dev.to/users/auth/github→ client_idd7251d40ac9298bdd9fe→ GitHub login+2FA (п.1 работает) → authorize → meta-refresh наdev.to/users/auth/github/callback?code=***&iss=.... - Стена: GET callback → 302 на
/users/sign_in, кука_Devto_Forem_Sessionнеаутентифицированная, API key пустой. Причина: reconstruct URL теряет полный state/параметры — нужен дословный URL из meta-refresh (исправил, но всё равно sign_in). Forem сверяет state с серверной сессией, которая у urllib-флоу разъезжается. - Решение (не проверено): реальный браузер (camoufox) для всего флоу, не urllib. НЕ тратить GH-акки на повторные urllib-попытки — каждый прогон засвечивает авторизацию приложения на акке.
5. Yandex SmartCaptcha — общий статус solver'ов
| Solver | Поддержка SmartCaptcha | Статус ключей |
|---|---|---|
| YesCaptcha | НЕТ (все 3 имени задач NOT_SUPPORTED) | жив, баланс ок |
| 2captcha (3 ключа с диска) | теоретически да | ключи мертвы (ERROR_KEY_DOES_NOT_EXIST) |
| CapSolver | есть UserRecaptcha/Funcaptcha, SmartCaptcha — проверять | баланс $0 |
Правило: перед авторегом на сайте с Yandex SmartCaptcha сначала проверить solver-поддержку, не начинать с браузерных прогонов.
Связь с другими скиллами
- Техника 2FA/meta-refresh дублирует GitLab OAuth-опыт: см.
gitlab-autoreg-project.mdв этом скилле. - Контекст задачи (кросс-постинг статей): alstack-channel-posts →
telegraph-article-agent-pipeline.md§«Дистрибуция статей». - Camoufox запуск:
env -u PYTHONPATH+ venv BrowserMCP/SearchMCP (C:/Users/User/tools/BrowserMCP/.venv/Scripts/python.exe).