Короткая ссылка - это непрозрачный редирект: получатель не видит, куда она ведёт, пока не нажмёт. Эта непрозрачность и есть продукт, и она же превращает плохо управляемый сервис в инструмент злоупотреблений. Если вы проверяете сервис, оцените десять мер и запросите ответ по каждой в письменном виде: проверка адресов назначения, подписанные вебхуки, многоуровневые лимиты, хешированные API-ключи, пароли на ссылки, ограничения срока действия, журнал аудита, списки разрешённых IP, фильтрация ботов и SSO. Ниже для каждой меры указано, что спросить и как она реализована в Elido; сверка с нашим кодом выполнена 2026-10-24. Там, где нам есть над чем работать, я пишу об этом прямо.
Модель угроз
На ссылочной инфраструктуре снова и снова повторяются четыре вида злоупотреблений.
Фишинг и вредоносное ПО. Короткая ссылка выглядит одинаково, ведёт ли она на лендинг или на форму для кражи учётных данных. Создать сотню ссылок можно за секунды, а разбираться с последствиями после их рассылки приходится неделями.
Утёкшие API-ключи. Ключи оказываются в клиентском JavaScript, публичных репозиториях и логах сборки. Если провайдер хранит их в открытом виде, одна утечка базы данных затрагивает всех клиентов.
Накрутка кликов ботами. Мониторы доступности, сервисы предпросмотра ссылок и краулеры переходят по коротким ссылкам. Без фильтрации они искажают показатели кампаний и любой биллинг по объёму.
Массовое злоупотребление редиректами. Одно взломанное рабочее пространство с неограниченным доступом к API способно создавать десятки тысяч ссылок в час и тратить репутацию доменов платформы на чужую фишинговую кампанию.
Десять мер
Для каждой меры ниже приведён вопрос к поставщику и ответ Elido.
1. Проверка адреса назначения: при создании и после
Проверка только при создании пропускает URL, которые чисты в первый день и попадают в списки на тридцатый. Нужны и синхронная проверка, и повторное сканирование по расписанию.
Url-scanner в Elido параллельно отправляет адрес назначения максимум в пять источников: Google Safe Browsing v4, PhishTank, URLhaus, SURBL и собственную эвристику по структуре URL (эвристика помечает хосты с xn--, так и обнаруживается омографический домен-двойник). Какие источники работают, зависит от ключей развёртывания и политики администратора. Итоговая оценка - максимум по источникам: 80 и выше блокируется, от 40 до 79 считается подозрительным, ниже 40 - чистым. На проверку при создании отводится бюджет в 250 мс. Заблокированные адреса получают 403 destination_blocked. Подозрительные ставятся в очередь на более глубокое асинхронное сканирование, за исключением совсем новых бесплатных рабочих пространств, где подозрительный результат отклоняется сразу.
Нужно знать об одном компромиссе: если сканер недоступен или отвечает слишком медленно, создание ссылки продолжается, а ссылка помечается как неизвестная для последующего пересканирования. Мы выбрали доступность, а не жёсткую блокировку.
2. Вебхуки, подписанные вместе с меткой времени
Неподписанные вебхуки не позволяют отличить поставщика от постороннего, нашедшего URL вашего эндпоинта. Подписывайте метку времени и тело вместе, иначе перехваченные запросы можно будет воспроизводить вечно.
Наш воркер доставки отправляет v1=HMAC-SHA256(secret, "<unix_timestamp>.<body>") в X-Elido-Signature (псевдоним X-Webhook-Signature) вместе с X-Webhook-Timestamp. Во время ротации секрета он также отправляет X-Elido-Signature-Previous, пока не закроется окно переходного периода. Формат v1= покажется знакомым, если вы проверяли вебхуки Stripe. Отклонять устаревшие метки времени должен получатель.
3. Лимиты на рабочее пространство в зависимости от тарифа
Лимиты только по IP не работают против меняющихся адресов, поэтому ограничивать нужно рабочее пространство. API ведёт token bucket для каждого рабочего пространства с размером по тарифу (free, paid, business) и возвращает 429 с X-RateLimit-Scope: workspace. Если не удалось определить тариф, применяется бесплатный. Новые бесплатные рабочие пространства первые 24 часа находятся на уровне «инкубатор»: по умолчанию 10 ссылок в день, CAPTCHA при создании в сессии браузера и принудительное синхронное сканирование. Обычные рабочие пространства получают 1 000 ссылок в день.
4. API-ключи, хешированные с серверным pepper
Хранить ключи в открытом виде недопустимо. Мы храним HMAC-SHA256(pepper, key) и показываем токен в открытом виде один раз при создании. При проверке входящий bearer-токен хешируется, и сравниваются хеши. Быстрый хеш с ключом подходит для длинных случайных токенов, а pepper означает, что одной украденной базы недостаточно для перебора. У ключей может быть expires_at; ротация ручная (см. раздел о пробелах).
5. Пароли на ссылки, хешированные Argon2id
Пароли на ссылки хранятся как хеши Argon2id (64 МиБ, 2 итерации, 4 потока, формат PHC), а API никогда не возвращает хеш, только булево значение password_set. Есть реальный пробел: по состоянию на 2026-10-24 в публичном сервисе редиректа нет запроса пароля. Проверка выполняется в API поиска (заголовок X-Password, в ответ приходит 401 и password_required: true), поэтому пароль на ссылке пока не является барьером доступа для тех, кто нажимает на короткий URL. О том, что работает сегодня, рассказывает наша статья о ссылках под паролем. Если нужен жёсткий контроль доступа, используйте режим ссылок со сквозным шифрованием или поставьте авторизацию на странице назначения.
6. Срок действия и лимит кликов
Старые ссылки кампаний остаются полезными для злоумышленников задолго после её окончания. Ссылки принимают expires_at и max_clicks, оба параметра применяются на пути редиректа. О жизненном цикле читайте в материале про срок действия ссылок и самоуничтожающиеся ссылки.
7. Журнал аудита, который можно прочитать самому
Изменяющие действия записываются в журнал аудита, который читают участники с правом аудита по GET /v1/workspaces/{id}/audit. Каждая запись связана с предыдущей через SHA-256 (prev_hash, entry_hash), поэтому правки и удаления обнаруживает задача проверки цепочки. Пакет доказательств для комплаенса (.../compliance/evidence.zip) включает события за последние 90 дней в формате CSV. Срок хранения задаётся для каждого рабочего пространства.
8. Списки разрешённых IP
Если весь легитимный трафик к API идёт из известных диапазонов, список разрешённых адресов превращает утёкший ключ в гораздо меньшую проблему. Каждое рабочее пространство может хранить CIDR-префиксы; когда список включён и не пуст, запросы с других адресов получают 403 даже с действующим ключом. Адрес клиента берётся из X-Forwarded-For, если он есть, поэтому убедитесь, что цепочка ваших прокси именно такая, как вы ожидаете.
9. Фильтрация ботов на пути редиректа
Edge сопоставляет User-Agent со списком сигнатур краулеров, ботов предпросмотра, мониторов доступности и HTTP-клиентов (около 45 записей) и считает ботом пустой User-Agent. Подошедшие запросы всё равно получают редирект; подавляется только событие клика. Отдельный скорер помечает клики как подозрительные, не блокируя их, когда срабатывают два или более мягких признака (нет User-Agent, нет Accept-Language, всплеск с одного IP).
10. SSO и SCIM
Настройка SSO для каждого рабочего пространства, определение домена через GET /v1/sso/discover?domain= и SCIM-вебхук позволяют провайдеру удостоверений управлять входом и отзывом доступа. Пароль Elido не видит.
Проверка за один день
Для первичной оценки сервиса пентест не нужен. Создайте бесплатный аккаунт, сократите URL, которым вы управляете, затем изучите заголовки ответа и документацию API. Создайте API-ключ и посмотрите, покажет ли панель его ещё раз. Запустите тестовый вебхук и изучите заголовки подписи. Затем отправьте таблицу ниже на адрес поддержки поставщика и засеките время ответа.
Вопросы к любому поставщику
| Вопрос | Хороший ответ звучит так |
|---|---|
| Как хранятся API-ключи? | Назван алгоритм и сказано, используется ли pepper |
| Как подписываются вебхуки? | HMAC, метка времени входит в подписываемую строку |
| По каким базам угроз идёт проверка? | Названные базы и расписание пересканирования |
| Лимиты заданы для рабочего пространства? | Да, и различаются по тарифам |
| Админ сам читает журнал аудита? | Самостоятельно, с экспортом, защищён от подделки |
| Хеширование паролей на ссылки? | Argon2id или bcrypt, никогда MD5 или SHA-256 |
| Фильтрация ботов? | Описана в документации, подавляются события, не редиректы |
| Список разрешённых IP для пространства? | Да, на основе CIDR |
Если поставщик не может письменно ответить на вопросы из первой, второй, третьей и пятой строк в течение рабочего дня, скорее всего, документации не существует.
Что в Elido ещё дорабатывается
- Ограничение запросов локально для процесса. Корзины хранятся в памяти каждой реплики, поэтому при N репликах рабочее пространство может превысить лимит до N раз. Общий ограничитель запланирован, но пока не выпущен.
- Нет WAF. У нас есть лимиты запросов, фильтрация ботов и список блокировки доменов. Для публичных ссылок с большим объёмом трафика поставьте внешний WAF.
- Повторное сканирование периодическое, а не мгновенное. Проверка запускается каждые шесть часов и заново проверяет ссылки, не сканировавшиеся последние семь дней; ссылка, помеченная новой проверкой, автоматически приостанавливается, а владелец получает уведомление. Ссылка может оставаться активной несколько дней после того, как её внесла в список база угроз.
- Ротация ключей ручная. Есть только необязательный
expires_at. - Сертификации пока нет. Нет сертификата ISO 27001; SOC 2 в подготовке.
- IP-адреса усекаются, а не удаляются. Edge обрезает их до /24 (IPv4) или /48 (IPv6), но город, координаты и полный user agent всё равно хранятся с каждым кликом. Что это значит для вас, объясняет наш чек-лист по GDPR.
Два смежных материала: уязвимости открытого редиректа и QR-фишинг.
Читайте также в блоге
Частые вопросы
Как понять, что сервис коротких ссылок безопасен?
Запросите конкретику в письменном виде и сравните её с десятью мерами из этого чек-листа. Безопасный сервис может назвать базы угроз, по которым проверяет адреса назначения, объяснить, как хранит API-ключи (назвать алгоритм, а не дать заверение), подписывать вебхуки HMAC с привязкой к времени, ограничивать запросы на уровне рабочего пространства, вести журнал аудита, который можно прочитать без обращения в поддержку, и описать, что происходит, если ссылка стала вредоносной после создания. Расплывчатые ответы вроде «мы серьёзно относимся к безопасности» - тревожный признак.
Можно ли использовать сервис коротких ссылок для фишинга?
Да. Короткая ссылка скрывает адрес назначения до клика, поэтому злоумышленники прячут за ней страницы для кражи учётных данных и загрузки вредоносного ПО. Именно поэтому серьёзный провайдер проверяет каждый адрес по базам угроз при создании, позже пересканирует сохранённые ссылки, ограничивает скорость создания ссылок новыми аккаунтами и быстро удаляет вредоносные ссылки после жалобы.
Как сервис коротких ссылок должен хранить API-ключи?
Никогда в открытом виде. Минимум - односторонний хеш, а лучше подмешивать серверный секрет (pepper), чтобы одной утечки базы данных было недостаточно для перебора офлайн. Elido хранит HMAC-SHA256 от каждого ключа с серверным pepper и показывает токен в открытом виде ровно один раз при создании. Поскольку API-ключи - длинные случайные строки, для них подходит быстрый хеш с ключом; медленные хеши паролей вроде Argon2id важны для секретов, которые придумывает человек, например паролей на ссылки.
Что должна включать подпись вебхука?
Подпись, вычисленную и по метке времени, и по необработанному телу запроса, плюс саму метку времени в отдельном заголовке, чтобы получатель мог отклонять устаревшие доставки. Если подписывать только тело, злоумышленник сможет бесконечно воспроизводить перехваченный запрос. Elido отправляет v1=HMAC-SHA256(secret, timestamp.body) в X-Elido-Signature (также доступен под именем X-Webhook-Signature) вместе с X-Webhook-Timestamp, а во время ротации секрета добавляет X-Elido-Signature-Previous, чтобы получатели могли сменить ключ без простоя.
Есть ли у Elido SOC 2 или ISO 27001?
Пока нет. Elido не сертифицирован по ISO 27001, а SOC 2 находится в подготовке, поэтому сегодня передать отчёт нельзя. Есть инженерная основа мер, описанных в этой статье, в том числе защищённая от подделки цепочка хешей в журнале аудита и экспорт доказательств за 90 дней. Если сертификат - жёсткое требование ваших закупок, считайте это текущим пробелом и уточняйте до покупки.
Нужен ли сервису коротких ссылок межсетевой экран веб-приложений (WAF)?
Путь редиректа у сервиса узкий: найти код и вернуть перенаправление. Это ограничивает риск инъекций, но не устраняет отказ в обслуживании и вредоносный трафик. Elido применяет на пути редиректа лимиты запросов, фильтрацию ботов и список блокировки, но собственного WAF прикладного уровня у него нет. Для публичных ссылок с большим объёмом трафика лучше подходит внешний WAF или набор правил CDN перед edge-узлом.
Попробуйте Elido
Вставьте URL - получите короткую ссылку
Без регистрации. Ссылка живёт 30 дней. Зарегистрируйтесь, чтобы оставить её навсегда.
Без регистрации. Зарегистрируйтесь бесплатно и получите 50 ссылок в месяц.
