Тема

Подписанные URL-адреса OG-изображений

Подписанный URL-адрес OG-изображения — это URL, параметры которого защищены подписью HMAC-SHA256, поэтому только вы (и код, хранящий ваш секрет) можете запрашивать рендеринг, который учитывается в вашей месячной квоте. FastOG подписывает содержимое — идентичные параметры всегда создают идентичный, кэшируемый URL, — что одновременно защищает вашу квоту и делает кэширование детерминированным.

Зачем подписывать URL-адреса OG-изображений

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

Как работает подпись контента

  1. Вы формируете каноническую строку запроса: все параметры (кроме подписи), отсортированные и закодированные по RFC-3986.
  2. Вы вычисляете HMAC_SHA256(secret, "GET/api/v1/og\n" + canonical).
  3. Вы добавляете подпись как параметр s.

Сообщение не содержит метки времени, поэтому URL стабилен: одинаковые параметры → одинаковый URL → одна и та же запись в кэше.

canonical = "key=sk_...&template=default&title=Hello"
signature = HMAC-SHA256(secret, "GET/api/v1/og\n" + canonical)
url = ".../api/v1/og?key=...&template=default&title=Hello&s=" + signature

Компромисс, который часто понимают неправильно

Опасение Реальность
«Подписанный URL истечёт» Нет — он подписан по содержимому и действителен, пока вы не смените секрет
«Изменённый URL ломает кэш» Нет — поддельный s получает 401 только при промахе кэша; закэшированные изображения всё равно возвращаются
«Для безопасности нужны метки времени» Подписи по содержимому достаточно, чтобы остановить злоупотребление квотой; часы не нужны

Одностраничные SDK

FastOG поставляет один файл подписанта (signer) для каждого языка (без зависимостей), поэтому вам не придётся вручную реализовывать HMAC. Скачайте его со страницы SDK или curl напрямую с CDN:

bash
curl -O https://fastog.com/sdk/node.js

FAQ

Истекают ли когда-либо подписанные URL?

По умолчанию нет — они остаются действительными, пока вы не переротируете HMAC-секрет ключа API. Подпись привязана к содержимому, а не ко времени.

Может ли кто-то другой потратить мою квоту, угадав URL?

Нет. Для формирования действительной подписи им нужен ваш HMAC-секрет; без него некэшированные рендеры возвращают 401 invalid_signature.

Подписываю ли я URL в браузере?

Нет. Подписывайте на серверной стороне (или в edge-функции), где секрет никогда не передается клиенту. URL отрендеренного изображения безопасно размещать в вашем публичном <head>.

Попробуйте бесплатно — регистрация не требуется

Предпросмотр и тестирование динамических OG-изображений за секунды.

Открыть бесплатный тестер OG-изображений

A BeCaSimulations site