Русский

Видео и субтитры · Загрузчик медиафайлов по прямой ссылке

Подписанные и истекающие URL: почему прямая ссылка может перестать работать уже завтра

· Фон

URL-адреса безопасность загрузки

Файл URL, содержащий параметры подписи и срока действия рядом с часами.
Оригинальная векторная иллюстрация ToolAcre

Многие прямые ссылки содержат в строках запроса подписи и время истечения срока действия. В этом посте объясняется, как работают заранее назначенные URL-адреса, почему их используют CDN и службы хранения и как распознать их, прежде чем они выйдут из строя.

Ссылка работала в пятницу, а в понедельник возвращает ошибку — такая же закономерность лежит в основе большинства «неработающих» прямых ссылок.

Ссылка может быть успешной в пятницу и вернуть ошибку HTTP в понедельник без перемещения файла. Запрос может содержать ограниченную по времени авторизацию, срок действия которой закончился между попытками.

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

Что такое подписанный URL — обычный путь к файлу плюс подпись, срок действия и иногда разрешенный IP-адрес, и все это в строке запроса.

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

Имена параметров и кодировка зависят от поставщика. Браузер обрабатывает их как данные запроса, а сервер решает, действительна ли их комбинация во время запроса. Некоторые схемы также связывают метод или заголовки, поэтому поставщик может разрешить GET, но отклонить HEAD; только его документированный алгоритм подписи может объяснить этот результат. Некоторые поставщики включают метод или выбранные заголовки при проверке, разрешая GET и отказывая в HEAD по тому же видимому запросу.

Почему службы хранения и CDN используют их — делитесь личным файлом, не делая его общедоступным и не требуя входа в систему.

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

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

Чтение строки запроса — определение меток времени истечения срока действия и параметров подписи в общих формах URL.

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

Нормализатор ToolAcre намеренно сохраняет поля `token`, `expires`, `signature` и поля в стиле X-Amz. Он удаляет только известные ключи в форме аналитики, поскольку удаление авторизации приведет к изменению адресованного запроса. Не декодируйте и не удаляйте случайно незнакомые параметры, поскольку непрозрачное на вид значение может быть частью подписанного канонического запроса, даже если его имя неочевидно. Неизвестные параметры могут участвовать в канонической подписи, даже если их имена не связаны с безопасностью, поэтому сохраните их без изменений.

Рабочий пример: ссылка на хранилище с отметкой времени — определение срока ее действия и того, как будет выглядеть ошибка после этого

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

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

Чего это не касается — обновление ссылки, которое может сделать только владелец файла.

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

Он также не сохраняет сеанс входа в систему, поскольку учетные данные опущены. Если для доступа требуются файлы cookie учетной записи, а не авторизация URL, файл выходит за рамки дизайна этого продукта. Изменение отметки времени вручную делает большинство подписей недействительными, поскольку крайний срок участвует в проверке сервера; это не механизм расширения. Изменение временной метки обычно делает проверку недействительной, поскольку срок сам по себе способствует подписи, а не действует как редактируемые метаданные.

Вывод: скачивайте, пока ссылка активна — как проверка URL и объявленная выборка Direct Media Downloader соответствуют ссылке с истекающим сроком действия

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

В объявлении хоста не сообщается, остается ли токен действительным. Проверка ссылки позволяет проверить доступность с помощью HEAD, но некоторые провайдеры обрабатывают HEAD иначе, чем GET, поэтому это не является продлением или гарантией. Для рабочих процессов архивирования согласуйте выдачу ссылки с окном передачи и проверьте сохраненные байты перед удалением достоверной копии отправителя. Согласуйте выдачу с запланированным окном передачи, затем проверьте завершенный актив перед удалением достоверной копии отправителя.