Как стать автором
Обновить

Как сделать из Яндекс.Диск'а безлимитную систему хранения файлов

Время на прочтение 4 мин
Количество просмотров 11K
Эта статья является заключительной в серии моих постов про Яндекс.Диск и загрузку файлов: обход каптчи, даунлоад части файла с RANGE запросом из удаленного источника и автоматический аплоад на Яндекс.Диск. Все эти посты объединяет одно желание, разобраться, как именно работает система защиты Яндекс.Диск'а и какие у нее недостатки. Я ни в коем случае не хочу сказать, что в Яндексе работают непрофессионалы, наоборот, изучая код, я пришел к обратному выводу. Единственная цель этой статьи, на примере Яндекс.Диск'a показать, как можно из бесплатного файлового хостинга сделать бесплатное хранилище под Ваш проект, просто идея. Ну и конечно, дать некоторую пищу для размышления разработчикам подобных сервисов.

Итак, представляю вашему вниманию пример использования файлового хостинга Яндекс.Диск несовсем по назначению.

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

Когда каптча успешно пройдена, система выдает вам временную ссылку, вида 18.dl19sd-narod.yandex.ru/disk/число/временный_хеш/имя_файла эта ссылка действительна только до той поры, пока вы не скачаете файл полностью или не пройдет по крайней мере 24 часа. Яндекс.Диск определяет это простейшим образом, HTTP Status Code 200. Как только сервер отдал Вам такой ответ, он больше ничего вам по этой ссылке не даст. Также существует ограничение на количество сгенерированных ссылок без каптчи, по последним данным за последние 5 минут, что не дает скачать много файлов за один раз. Кажется все логично? Как можно обойти такой «тупой каунтер», который просто считает сколько выдал ссылок, 1-2-3-4-5 и КАПТЧА. Да? Но в этом и проблема, именно тут и закладывается основа обхода этой системы. Нам ведь не надо хранить 5и гигабайтные файлы? Нам ведь нужно хранить наши файлики 5,10, 100 мегабайт? И что нам этот каунтер, когда есть архив? Под архивом, в данном конкретном случае, я подразумеваю простую склейку файлов.

Вы подготавливаете ваши файлы в 5и гигабайтные архивы, и используя скрипт даунлоада файлов по частям получаете к ним доступ. Даже если у вас 1 большой файл, достаточно просто добавить к нему 1 байт и все сработает. Так как ссылка действительна около суток, то за это время вы можете неограниченно выкачивать ваши файлы обратно. Яндекс.Диск будет думать, что вы просто качаете файл по частям, выдавая HTTP Status Code 206 и ссылка будет валидна даже после того, как вы скачаете файл! Именно по этой причине лимита 10 запросов без каптчи с Яндекс.Бар'ом за 5 минут (знатоки поправят, сколько точно) более чем достаточно. И не потому, что разработчик ошибся, а потому, что разработчик думал, что каптча защищает файл, а реально получается, что каптча защищает несколько файлов в одном файле.

Самое странное, что блокировка соединений происходит в пределах ссылки, а не в пределах IP адреса, т.е. Вы можете сгенерировать пару десятков ссылок и перегенерировать их по мере их выключения (примерно каждые 24 часа в настоящий момент) и качать с одного IP один и тот же файл в несколько потоков (по крайней мере у меня получилось). Так у вас всегда будет достаточное количество потоков для загрузки файлов. Периодически вам придется скачать файл полностью, чтобы не продлевать его жизнь в ручном режиме.

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

Как все это можно использовать? Ну например, вы создаете очередную файловую помойку аля rapidshare.com или фотохостинг, но не хотите упираться в ограничения Яндекс.Фотки, какая основная проблема всех таких проектов? Правильно, где хранить файлы дешево. В случае с Яндекс.Диск вы можете просто купить шаред/VPS хостинг в Москве и рублей за 300 получить доступ к безлимитному 100 мегабит каналу до Яндекса. Т.е. при минимальном вложении вы получите файловую помойку неограниченной вместимости. Если немного потрудится, то реально сделать грамотный проект, с кешированием данных на шаред хостингах и с постоянным хранением на Яндекс.Диске.

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

P.S. Эта статья является результатом моего исследования и ни в коем случае не призывает использовать информацию в корыстных целях. Моя цель, помочь разработчикам улучшить безопасность веб приложений, заставить из подумать о том, что их приложение может использоваться не только так, как они это задумали изначально, а вот, например, таким «хитрым» способом. Именно поэтому никакого исходного кода законченной системы я приводить не буду.

P.P.S. По результатам коментариев в моем предыдущем посте, оказалось, что Яндекс относится лояльно к этой проблеме. Ну чтож, думаю, мы скоро это поймем, если скрипты, представленные в моих статьях продолжат свою работу :)

P.P.P.S. Настоящей статьей заканчивается эта серия, а также мой отпуск и мне пора опять выходить на работу, так что скорых новых постов ждать не следует. Надеюсь, вам понравились мои статьи.
Теги:
Хабы:
+13
Комментарии 19
Комментарии Комментарии 19

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн