Поиск скрытых подсайтов на DTF с помощью открытых данных (и одного бага)

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

Как я искал скрытые подсайты

В своем посте про анализ пользователей DTF по открытым данным я сделал один технический вывод, который не очень интересен обычному человеку, но который полезен мне:

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

Я

Это значит, что, например, сущность с ID 12 может быть пользователем, а сущность с ID 13 — подсайтом. Если я запрашиваю пользователя с ID 13, то получаю ошибку 404 — не найдено.

Когда я собирал базу данных пользователей, то я записывал не только самих пользователей, но и ошибки, если они случались. У меня в базе 436 идентификаторов, для которых я получил ошибку 404. Это могут быть либо удаленные пользователи, либо подсайты. Я могу попробовать запросить информацию о подсайтах с такими идентификаторами. Если это действительно подсайт, и у меня есть к нему доступ, то я получу информацию о нем. Если это удаленный пользователь, то я получу ошибку 404 — подсайт не найден. А если это закрытый подсайт, то я скорее всего получу ошибку 403 (нет доступа) или 483 (доступ только для одобренных пользователей).

Чтобы еще сильнее сократить перебор, я запросил список всех открытых подсайтов DTF. Для этого не нужно перебирать все идентификаторы, так как у API основы есть команда, через которую можно запросить все открытые подсайты:

Так я записал себе в базу 282 подсайта. Получается, теперь мне нужно перебрать всего 154 идентификатора — это можно сделать за пару минут (250000 пользователей я записывал 4 суток).

Сказано-сделано. Я перебрал эти идентификаторы и для трех из них получил ошибку 483:

  • 104593
  • 141288
  • 203796

Получается, на DTF есть три скрытых подсайта. Но что это за подсайты?

Спасибо Простагме за пул-реквест в моем репозитории со скриптами для анализа Очобы — благодаря ему я узнал про эту команду API:

/subsite/{id}/timeline/{sorting}

Она дает все посты для какого-то подсайта. Сама по себе команда мне не очень интересна, но у нее есть полезная особенность. Если у меня нет доступа к подсайту, то эта команда вернет пустой массив. Но если в нем есть закрепленный пост, то эта команда его покажет, даже если подсайт закрытый. А у каждого поста есть информация о том, где он опубликован. Получается, одного закрепленного поста мне достаточно, чтобы через эту команду получить адрес, название, и описание скрытого подсайта.

Возможно, это баг. А может, оно так и должно работать? Откуда мне знать? Ширяев, не бань меня!

В общем, я смог идентифицировать два из трех подсайтов:

"subsite": { "id": 141288, "url": "https:\/\/dtf.ru\/admins", "name": "Владельцы подсайтов", "description": "Здесь собрана информация, инструкция и обновления для владельцев подсайтов." }
"subsite": { "id": 203796, "url": "https:\/\/dtf.ru\/new_by_4_at_1578906095", "name": "new_by_4_at_1578906095", "description": "Оплот независимости DTF (Подсайт-баг)(Самый грешной подсайт)" }

С третьим подсайтом это не прокатило, так как там не было закрепленного поста. Но по очень удачному совпадению Простагма в комментариях к одному моему посту написал вот это:

Поиск скрытых подсайтов на DTF с помощью открытых данных (и одного бага)

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

"subsite": { "id": 104593, "url": "https:\/\/dtf.ru\/s\/notacowlevel", "name": "Not a cow level", "description": "Секретный уровень" }

Как я изучал активность в скрытых подсайтах

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

Но тут не все так просто. Если для какого-то поста я получил ошибку 403, то я не знаю, когда он был опубликован. Когда создается новый пост, он получает идентификатор, который на 1 больше, чем пост, который был создан до него.

Проблема в том, что созданием поста считается его первое появление в черновике, а дата — это время публикации. Между моментом создания и моментом публикации может пройти сколько угодно времени, так как иногда посты лежат месяцами в черновиках. Но с некоторой погрешностью все-таки можно принять, что посты с близкими идентификаторами имеют близкое время публикации. Я считал время публикации скрытого поста как среднее время между 10 открытыми постами до него и 10 открытыми постами после него.

Получаем такой график:

Поиск скрытых подсайтов на DTF с помощью открытых данных (и одного бага)

В январе 2020 что-то случилось. Увеличим график:

Поиск скрытых подсайтов на DTF с помощью открытых данных (и одного бага)

На самом деле, я знаю, что случилось в январе 2020. Примерно 13-14 января 2020 появился ньюбай. Потом Ширяев начал его шатать. Огромный пик 18-19 января — это битва за ньюбай. Потом подсайт стал закрытым, и я не знаю, что там происходило дальше.

Скорее всего, что-то такое.

Из того же графика видно, что какая-то движуха в скрытых подсайтах все еще есть. Это точно не подсайт с коровами, так как там всего 174 поста за все время. Админский подсайт тоже вряд ли генерирует столько постов.

Бритва Оккама говорит, что если такое количество постов началось с созданием ньюбая, то и сейчас эти посты создаются в ньюбае.

Так что признавайтесь, я вас спалил, жив ньюбай или нет? Я вижу, что жив.

Поиск скрытых подсайтов на DTF с помощью открытых данных (и одного бага)
11 показ
3K3K открытий
22 репоста
94 комментария

Первая война за ньюбай в кратце:

Всё кекали с того, что в ньюбае можно будет постить прон, а, по итогу, нам всем Ширяев палкой по жопе настучал, закрыл подсайт и выгнал всех, у кого не было хотя бы одного поста на 10+ рейтинга.
Прон так постить и не разрешили, кстати.
С тех пор ньюбай до сих пор официально мёртв.

Ответить

Ты слишком много узнал, пора тебя устранить

Ответить

жив ньюбай или нет?

Ответить