cdrop

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

3 полученияTTL 1–168 чcnet · pem · ssh

Опубликовать артефакт →Полное руководство

Обзор

cdrop — только транспорт. Он не проверяет подписи и цепочки сертификатов: проверяются формат текста и общий размер, затем текст хранится ограниченное время и отдаётся по короткой ссылке. Получатель обязан проверить артефакт заново своими средствами.

Базовый URLhttps://lab917.ftp.sh
Типы артефактовarmor cnet, публичный PEM, публичные ключи и сертификаты SSH
ID объектакороткий непрозрачный идентификатор, без учёта регистра
АвторизацияAuthorization: Bearer <token> для публикации и удаления

Область (scope) определяется классом артефакта: cnet, pem или ssh. Токен с областями ограничен перечисленными в его настройке областями.

Типы артефактов

cnetArmored-артефакты cnet: CNET INVITATION, CNET REQUEST, CNET PASS. Проверяется armor, но не подпись, сеть и срок действия.
pemСертификаты X.509 (включая цепочки), CSR, CRL, открытые ключи и PKCS#7. Цепочки не проверяются; контролируются только формат и общий размер.
sshПубличные ключи OpenSSH и SSH-сертификаты в формате authorized_keys, по одному в строке. Приватные ключи отклоняются.

Допустимые PEM-блоки

БлокСодержимое
CERTIFICATE, TRUSTED CERTIFICATEсертификат X.509
CERTIFICATE REQUEST, NEW CERTIFICATE REQUESTCSR (PKCS#10)
X509 CRLсписок отзыва
PUBLIC KEY, RSA PUBLIC KEYоткрытый ключ
PKCS7публичный набор сертификатов

Допустимые типы SSH: ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256/384/521, sk-ssh-ed25519@openssh.com, sk-ecdsa-sha2-nistp256@openssh.com и их сертификатные формы -cert-v01@openssh.com; ключи ГОСТ 2012 ssh-gost2012-256 и ssh-gost2012-512 (без сертификатных форм).

Блокируются: приватные ключи и контейнеры с ними — RSA PRIVATE KEY (PKCS#1), PRIVATE KEY (PKCS#8), ENCRYPTED PRIVATE KEY, EC PRIVATE KEY, DSA PRIVATE KEY, OPENSSH PRIVATE KEY — а также произвольный текст. Бинарные контейнеры PKCS#12/PFX не принимаются. В одной публикации не более 16 блоков или строк SSH; действует общий предел размера тела.

cdrop не предназначен для секретов. Не публикуйте приватные ключи и пароли; для этого используйте E2E-инструменты.

Публикация артефакта

POST/api/v1/objects

Тело запроса — armored-текст в text/plain; charset=utf-8. Тип определяется по armor.

ЗаголовокЗначение
AuthorizationBearer <token> (обязателен)
Content-Typetext/plain; charset=utf-8
X-CDROP-TTLНеобязательный срок жизни, например 24h. Диапазон 1h–168h.
X-CDROP-GRANTНеобязательно: выдать ограниченный грант, например request=3. Только с publish-токеном.
curl -X POST https://lab917.ftp.sh/api/v1/objects \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: text/plain; charset=utf-8" \
  -H "X-CDROP-GRANT: request=3" \
  -H "X-CDROP-TTL: 24h" \
  --data-binary @invite.txt

Ответ 201 Created:

{
  "id": "7Q2M9K4TABCD",
  "url": "https://lab917.ftp.sh/o/7Q2M9K4TABCD",
  "expires_at": "2026-11-05T12:00:00Z",
  "remaining": 3,
  "sha256": "9f2c...",
  "grant": {
    "kind": "request",
    "url": "https://lab917.ftp.sh/p/cdg_...",
    "remaining": 3,
    "expires_at": "2026-11-05T12:00:00Z"
  }
}

remaining фиксируется при публикации (1–3, по умолчанию 3). sha256 — хеш сохранённого текста. grant присутствует, только если грант запрошен или запрос выполнен токеном гранта.

Веб-форма без токена, с captcha: /publish.

Ограниченные гранты публикации

Publish-токен может выдать грант — полную ссылку на этот же сервис, например https://lab917.ftp.sh/p/cdg_.... Ссылка позволяет получателю опубликовать следующий артефакт ограниченное число раз без publish-токена. Полная ссылка встраивается в сам опубликованный артефакт: заголовком X-CDROP-GRANT в armor cnet или PEM либо комментарием # X-CDROP-GRANT: ... в SSH.

Заголовок / URLЗначение
X-CDROP-GRANT<kind> или <kind>=<uses>; kind должен соответствовать области артефакта
GET /p/<token>HTML-форма: публикация без captcha и без токена
POST /p/<token>Публикация артефакта типа гранта

Допустимые kind: request (и другие типы cnet) для cnet, pem для PEM, ssh-key/ssh-cert для SSH. Гранты не привязаны к cnet. Грант привязан к строке публикации-родителя и исчезает вместе с ней; он не даёт метаданных, удаления, панели и не позволяет выдать новый грант. Истёкший или исчерпанный грант — 410 Gone.

В форме с captcha /ru/publish есть чек-бокс «выдать грант»; число публикаций берётся из серверного значения grants.uses.

Получение артефакта

GET/o/<ID>
GET/o/<ID>.txt

HTML-страница показывает артефакт, кнопку копирования, строку состояния и ссылку на текстовую версию. Эндпоинт .txt отдаёт точный armored-текст как text/plain.

Страницы отдают Cache-Control: no-store, X-Robots-Tag: noindex, Referrer-Policy: no-referrer и строгий Content-Security-Policy.

curl https://lab917.ftp.sh/o/7Q2M9K4TABCD.txt

Метаданные

GET/api/v1/objects/<ID>

Возвращает метаданные публикации без списания получения. Требуется publish-токен.

curl https://lab917.ftp.sh/api/v1/objects/7Q2M9K4TABCD \
  -H "Authorization: Bearer $TOKEN"
{
  "id": "7Q2M9K4TABCD",
  "kind": "invite",
  "scope": "cnet",
  "size": 1302,
  "sha256": "9f2c...",
  "created_at": "2026-11-04T12:00:00Z",
  "expires_at": "2026-11-05T12:00:00Z",
  "remaining": 2
}

kind — одно из invite, request, passport, pem, ssh-key, ssh-cert; scope — cnet, pem или ssh. Истёкшие, исчерпанные и удалённые объекты возвращают 410 Gone; неизвестные ID — 404.

Досрочное удаление

DELETE/api/v1/objects/<ID>

Требуется publish-токен. Удаление немедленное, но мягкое: остаток обнуляется, объект отдаёт 410 Gone до цикла очистки.

СтатусЗначение
204Удалено.
401Токен отсутствует или неверен.
403Токену не разрешена область объекта.
404Неизвестный ID.
410Уже истекло, исчерпано или удалено.
curl -X DELETE https://lab917.ftp.sh/api/v1/objects/7Q2M9K4TABCD \
  -H "Authorization: Bearer $TOKEN"

Служебные эндпоинты

GET/healthz

200 ok, если БД доступна, иначе 503.

Эксплуатационные метрики доступны только операторам.

GET/ru/cdrop

Эта страница. Корень сайта — free lab, отдельная домашняя страница.

Ограничения и значения по умолчанию

ПараметрПо умолчаниюДиапазон / примечания
Размер артефакта16 КиБМаксимум сервера 64 КиБ; больше — 413.
TTL24ч1h–168h; выше максимума сервера — 400.
Получений31–3, фиксируется при публикации.
Лимиты запросовна IP429 с Retry-After.
ОчисткапериодическиИстёкшие строки удаляются; затем ID отдаёт 404.

Ошибки

API возвращает компактный JSON:

{"error": "object not found"}
СтатусКогда
400Не armored-артефакт, пустое тело или неверный X-CDROP-TTL.
401Publish-токен отсутствует или неверен.
403Токену не разрешена эта область.
404Неизвестный ID объекта.
410Объект истёк, исчерпан или удалён.
413Артефакт больше максимума сервера.
422Приватный ключ, недопустимый тип блока, смешение классов или слишком много блоков.
429Превышен лимит запросов.
500Внутренняя ошибка или ошибка БД.

CLI

Исполняемый файл cdrop читает конфиг по пути из флага -config (или переменной CDROP_CONFIG), а publish-токен — из CDROP_TOKEN (или поля publish_token в конфиге).

# Публикация и вывод короткой ссылки
cdrop publish -config cdrop.yaml -file invite.txt

# Публикация с QR в консоли и PNG-копией
cdrop publish -config cdrop.yaml -file invite.txt -qr -qr-out invite.png

# Получение текста
cdrop get -config cdrop.yaml 7Q2M9K4TABCD

# Метаданные
cdrop status -config cdrop.yaml 7Q2M9K4TABCD

# QR в консоли или PNG-файлом
cdrop qr -config cdrop.yaml 7Q2M9K4TABCD
cdrop qr -config cdrop.yaml -out link.png 7Q2M9K4TABCD

В примерах -qr печатает QR в консоль; -qr-out и -out пишут PNG-файл.

Безопасность

cdrop не является CA и не ручается за артефакты. Всегда проверяйте подписи и цепочки сертификатов самостоятельно, прежде чем использовать приглашение, заявку, паспорт, сертификат или ключ.