Перейти к содержанию
HexaTransfer
Вернуться к блогу
Шифрование и безопасность

Лучшие практики безопасного обмена ссылками: защитите URL для скачивания

Лучшие практики для безопасных ссылок скачивания. Безопасность токенов URL, срок действия ссылок и лимиты загрузок.

Безопасная ссылка для скачивания рассматривает сам URL как часть ключа. Часть после слэша должна содержать минимум 128 бит энтропии (например, hexatransfer.com/d/7Kj9xQmN2vP8rBwLsE4fT), истекать через часы, а не дни, ограничивать скачивания одной-двумя попытками и — критически — никогда не быть единственным секретом. Сочетайте её с AES-256-GCM ключом, производным от пароля, расположенным во фрагменте URL (после #), чтобы он никогда не попадал в лог сервера, и вы нейтрализуете наиболее распространённые векторы утечки ссылок — от предпросмотров Slack до архивов корпоративных прокси.

Энтропия: математика угадываемости

Шеститимвольный slug из букв и цифр имеет 36^6 = 2.1 миллиарда комбинаций. Звучит внушительно, пока не осознаёте, что ботнет может проверять 100 000 URL в секунду через CDN — значит, неаутентифицированный атакующий перебирает всё пространство примерно за шесть часов. Поднимите до 128 бит (22 символа base64url), и время угадывания превысит тепловую смерть вселенной. Используйте crypto.getRandomValues(), никогда Math.random(), и никогда не кодируйте ID из базы данных. Последовательные токены раскрывают объём передач любому, кто соберёт два примера с недельным интервалом.

Размещайте ключ во фрагменте, а не в пути

Всё после # в URL — это идентификатор фрагмента; браузеры не отправляют его на сервер. Хранение ключа дешифрования там — паттерн, разработанный Firefox Send: /#k=abc123xyz. Сервер видит только непрозрачный slug для скачивания, поэтому его логи доступа, экспорты SIEM и дампы при утечках не содержат ключевого материала. CDN-кэши на граничных узлах также не могут расшифровать полезную нагрузку. Развёртывания Slack отбрасывают фрагмент при зондировании URL, поэтому бот предпросмотра никогда не видит ключ. Один этот приём блокирует 80% практических атак перехвата ссылок.

Окна истечения под угрозу

Стандартное семидневное истечение слишком щедро для большинства сценариев. Калибруйте под рабочий процесс: 15 минут для PDF банковского перевода, 4 часа для проверки договора, 24 часа для фотоальбома, 7 дней — только для асинхронного международного сотрудничества. Выражайте истечение как абсолютную UTC-временну́ю метку в подписанной полезной нагрузке URL и применяйте на сервере — никогда не доверяйте клиентским часам. При истечении перезапишите шифротекст на диске нулями (в идеале через blkdiscard на NVMe), чтобы последующий форензик-анализ диска не нашёл ничего.

Счётчики скачиваний, которые действительно работают

Ссылка на одно скачивание звучит надёжно, пока не осознаёте, что браузеры агрессивно повторяют частичные передачи. Если Chrome прервётся на 80% и возобновит с новым запросом Range, считается ли это двумя скачиваниями? Устанавливайте счётчик на границе завершения файла, а не на HTTP-запрос. Инкрементируйте только при отправке последнего байта и проверке тега аутентификации. Альтернативно, отслеживайте уникальные идентификаторы сессий в 10-минутном окне: одна сессия = одно скачивание, независимо от количества Range-запросов. WeTransfer смешивает эти подходы и неоднократно получал критику за ложную отметку ссылок как использованных.

Подписанные URL с краткосрочными токенами

Для корпоративных потоков оборачивайте URL скачивания подписью HMAC-SHA256 над (slug, expiry, max_downloads, issuer_id). Сервер проверяет подпись перед выдачей любого байта. Pre-signed URL S3 делают это нативно; R2 и Backblaze B2 следуют тому же паттерну. Подписанный URL, утёкший в Slack, всё ещё опасен, но короткое истечение (скажем, 5 минут) ограничивает ущерб. Сочетайте с привязкой к IP — подпись включает ожидаемый префикс /24 — для противодействия пересылке ссылок через геозоны.

Предотвращение утечек через Referer и предпросмотры

Браузеры отправляют полный URL (без фрагмента) в заголовке Referer, если только не установлен Referrer-Policy: no-referrer на странице скачивания. Без этого заголовка переход по внешней ссылке со страницы скачивания раскрывает slug каждому трекеру на целевом сайте. Также установите X-Robots-Tag: noindex, nofollow и robots.txt, блокирующий /d/, чтобы Googlebot не архивировал ссылку, случайно вставленную на форуме. Для предпросмотров Slack и Teams возвращайте 204 No Content для User-Agent, соответствующих их ботам разворачивания.

Контроль пересылки и привязка к получателю

Когда Алиса отправляет Бобу ссылку, Боб может переслать её кому угодно. Для предотвращения этого привяжите ссылку к личности Боба. Варианты по возрастающей надёжности: email-верификация (одноразовый токен на bob@firm.com), SMS-верификация (OTP на номер телефона), регистрация passkey при первом посещении или вход через OIDC с Google Workspace Боба. Каждый шаг торгует удобством ради контроля. Для ответа на запрос субъекта данных по GDPR Статья 15 обычно достаточно email-верификации. Для лабораторного результата по HIPAA нужен passkey или OIDC.

Отзыв по требованию

Даже при всех средствах защиты что-то пойдёт не так — ноутбук украден, подрядчик уволен, ссылка отправлена не тому получателю. Кнопка отзыва, мгновенно убивающая ссылку, важна. Реализация: поддерживайте список отзыва с ключом по хэшу slug, проверяемому при каждом скачивании. Распространяйте на CDN-граничные узлы в течение 60 секунд через API очистки (Cloudflare /zones/:id/purge_cache принимает список URL). HexaTransfer предоставляет отзыв через дашборд отправителя; Dropbox Transfer и Smash поддерживают это, но взимают дополнительную плату. Тестируйте отзыв ежеквартально — нерабочие кнопки во время инцидентов хуже, чем их отсутствие.

Телеметрия без слежки

Логируйте достаточно для обнаружения злоупотреблений (хэш IP, семейство User-Agent, временна́я метка, обслуженные байты), но не достаточно для восстановления личности получателя. Хэшируйте IP с ежедневно ротируемым ключом, чтобы окна корреляции оставались короткими. Очевидно, никогда не логируйте фрагмент URL. 30-дневный срок хранения удовлетворяет SOC 2 Common Criteria 7.2 без создания архива для слежки. Предоставляйте отправителю счётчики злоупотреблений в дашборде, чтобы он видел «3 неудачных попытки пароля из AS15169» и знал, что нужно отозвать ссылку.

Попробуйте на hexatransfer.com — бесплатно, без регистрации, до 10 ГБ.

Безопасная отправка больших файлов со сквозным шифрованием

Передавайте файлы до 10 ГБ бесплатно со сквозным шифрованием. Регистрация не требуется. Ваши файлы шифруются в браузере перед загрузкой — никто другой не может их прочитать.

Отправить файл