Hacker News Digest

Тег: #proof-of-work

Постов: 2

Sometimes CPU cores are odd (anubis.techaro.lol)

Всё ПО содержит баги; чем сложнее код, тем запутаннее ошибки. Однажды я столкнулся с «однострочным» фиксом, который спас пользователей от случайных отказов Anubis.

Как всё началось
Anubis — WAF, который проверяет, что клиент — настоящий браузер. Основной способ — proof-of-work: клиент считает хэши, ограничивая скорость подключения. Чтобы экран-заглушка исчезал быстрее, JS-код использует максимум ядер CPU.

Проблема
Firefox тормозит, если задействовать все ядра; оптимум — половина. В коде было:

threads = Math.max(navigator.hardwareConcurrency / 2, 1)

Все мои тестовые устройства (MacBook, Ryzen, iPhone, Steam Deck…) имели чётное количество ядер, поэтому navigator.hardwareConcurrency / 2 всегда получался целым. Но если устройство с нечётным числом ядер (например, 3), результат — 1.5. JavaScript-числа — это IEEE-754, и дробная часть приводила к багу «invalid response», потому что логика расчёта nonce рассчитана на целые.

Фикс
Округлил до ближайшего целого:

threads = Math.max(Math.floor(navigator.hardwareConcurrency / 2), 1)

Одна строчка — и исчезли случайные отказы на нечётных CPU.

by rbanffy • 28 августа 2025 г. в 21:39 • 98 points

ОригиналHN

#javascript#web-application-firewall#proof-of-work#web-performance#browser-detection#cpu-cores#ieee-754

Комментарии (109)

  • Разработчики Anubis не учли, что бывают процессоры с нечётным числом ядер (3, 9 и т.д.), из-за чего проверка «кол-во ядер = степень двойки» ломается.
  • Пользователи жалуются: на телефонах с 9 ядрами (S24+) тест висит и жрёт батарею, а без JS сайты работают быстрее.
  • Часть комментаторов считает PoW-валидацию бесполезной: боты всё равно запускают JS, а легитимные пользователи платят тем же временем/энергией.
  • Предлагают отказаться от PoW в пользу «Proof of React» или просто убрать жёсткую привязку к числу ядер.
  • Некоторые отключают JS и cookies по умолчанию и обходят Anubis, но всё чаще просто уходят с сайтов.

Why are anime catgirls blocking my access to the Linux kernel? (lock.cmpxchg8b.com) 🔥 Горячее 💬 Длинная дискуссия

Anubis — «весы душ» для HTTP-запросов, защищают сайты от ИИ-ботов. Вместо CAPTCHA требует перебора nonce, чтобы SHA-256(challenge+nonce) начиналась с 4 нулей (16 бит). Это Proof-of-Work, как в биткоине, но не майнинг.

Проблема: задача легка для дата-центра ИИ, но трудна для обычных пользователей без мощного железа.
Сайты ядра Linux (git.kernel.org, lore.kernel.org) теперь требуют этот PoW, что ломает скрипты и консольные клиенты.

Цифры

  • Сложность 4 → 2¹⁶ ≈ 65 536 SHA-256 на токен.
  • Токен живёт 7 дней.
  • 11 508 «звёзд» GitHub ≈ столько сайтов с Anubis.
  • На бесплатной e2-micro GCP: 3688 кБ/с SHA-256 → ≈ 230 000 хэшей/с.
  • Для обхода всех сайтов за неделю: 11 508 × 65 536 ≈ 754 млн хэшей → 54 минуты CPU на одном ядре.
    Цена: копейки, даже в облаке. ИИ-вендору это ничто, а владельцу VPS-128 МБ — проблема.

Альтернативы

  • Rate-limit, WAF, robots.txt, API-ключи, CDN, client-cert.
  • Использовать Tor Browser (JS включён) или Selenium.
  • Патчить curl/wget, добавляя JS-движок или готовый PoW-скрипт.
  • Прокси-браузер (Puppeteer, Playwright) в headless-режиме.

Workarounds

  • anubis-pass — консольный майнер на Go, решает задачу и выдаёт cookie.
  • Пользовательские скрипты, которые запрашивают страницу, вычисляют PoW и продолжают сессию.

by taviso • 20 августа 2025 г. в 14:54 • 726 points

ОригиналHN

#anubis#proof-of-work#sha-256#curl#wget#go#tor#puppeteer#playwright#selenium

Комментарии (770)

  • Anubis — это PoW-заглушка, которая заставляет клиента выполнить небольшой вычислительный «тест» и получить токен на неделю; таким образом сервер получает идентификатор для рейт-лимита и борется с массовым «распылением» запросов ботами.
  • Многие участники считают, что PoW легко обходится при наличии вычислительных ресурсов, но пока большинство AI-краулеров просто не стали заморачиваться, поэтому Anubis «работает» в реальности, хоть и не идеален.
  • Критика: задержки 10–20 с на слабых устройствах, проблемы с доступом без JS, «аниме-девочка» вызывает у кого-то раздражение, а у кого-то ностальгию.
  • Часть комментаторов предлагает альтернативы: микроплатежи, «человеческие» вопросы, лабиринты-ловушки, VPN-сети или просто блокировки по ASN.
  • Самое главное: Anubis не решает проблему окончательно, но добавляет достаточно трения, чтобы заставить владельцев краулеров пересмотреть объёмы сканирования.