Skip to content

Защита безопасности API

В сервисах API X-Timestamp, X-Nonce, X-AccessKey и X-Signature являются общими основными компонентами механизмов подписи запросов API, в основном используемыми для аутентификации, проверки целостности данных и предотвращения повторных атак.

Анализ основных компонентов

1. X-Timestamp (Временная метка)

Функции

  • Записывает время инициации запроса (обычно временная метка Unix) для проверки своевременности запроса серверной стороной.

Решенные проблемы

  • Предотвращение повторных атак: Сервер устанавливает период действия временной метки (например, 5 минут), напрямую отклоняя просроченные запросы. Атакеры не могут повторно использовать перехваченные легитимные запросы после их истечения.
  • Проверка синхронизации: Обеспечивает, что отклонение времени между клиентом и сервером находится в разумных пределах, предотвращая, чтобы манипуляции с временем не повлияли на действительность запроса.

2. X-Nonce (Одноразовое случайное число)

Функции

  • Генерирует уникальную случайную строку (например, UUID) для обеспечения уникальности каждого запроса.

Решенные проблемы

  • Предотвращение повторных запросов: Сервер кэширует значения Nonce (или комбинирует с временными метками) для отклонения повторных запросов, которые уже были обработаны.
  • Повышение динамичности подписи: Даже для запросов с одинаковыми параметрами результат подписи отличается из-за разных Nonce, предотвращая повторное использование подписи.

3. X-AccessKey (Ключ доступа)

Функции

  • Идентифицирует идентичность клиента (например, пользователя, приложения или сервиса), обычно используется в паре с предварительно назначенным сервером SecretKey.

Решенные проблемы

  • Аутентификация: Проверяет, является ли запрашивающий легально зарегистрированным клиентом.

4. X-Signature (Подпись запроса)

Функции

  • Клиент использует SecretKey для генерации подписи для содержимого запроса (параметры, путь, временная метка, Nonce и т.д.), а сервер проверяет подпись, используя тот же алгоритм.

Решенные проблемы

  • Целостность данных: Обеспечивает, что запрос не был изменен во время передачи (изменения параметров приведут к неудаче проверки подписи).
  • Предотвращение подделки идентичности: Атакеры без SecretKey не могут сгенерировать правильные подписи и не могут подделать легитимные запросы.
  • Привязка критических параметров: Алгоритмы подписи обычно включают методы запросов, пути, параметры и т.д., обеспечивая согласованность между содержимым запроса и подписью.

Пример общего процесса

Шаги генерации подписи клиентом

  1. Конкатенировать данные запроса
  2. Использовать SecretKey для генерации подписи через алгоритм шифрования и сохранить ее в заголовке X-Signature.
  3. Добавить X-Timestamp, X-Nonce, X-AccessKey и X-Signature в заголовки запроса и отправить.

Процесс проверки серверной стороны

  1. Проверить временную метку: Убедиться, что она находится в пределах периода действия (например, ±5 минут).
  2. Проверить Nonce: Убедиться, что он уже существует (для предотвращения повторных запросов, может быть кэширован с временными метками).
  3. Проверить подпись: Найти соответствующий SecretKey через AccessKey, восстановить подпись с использованием того же алгоритма и сравнить ее с X-Signature.
  4. Обработка результата: Если все проверки пройдены, выполнить логику запроса; в противном случае вернуть ошибки 401 Unauthorized или 403 Forbidden.

Резюме преимуществ механизма

ФункцияМетод реализации
АутентификацияAccessKey идентифицирует идентичность клиента, Signature проверяет, что клиент владеет действительным SecretKey.
Защита от подделки данныхПодпись привязана к содержимому запроса (метод, путь, параметры и т.д.), любое изменение приведет к неудаче проверки подписи.
Защита от повторных атакTimestamp обеспечивает своевременность, Nonce обеспечивает уникальность запроса, двойные механизмы отклоняют повторные/просроченные запросы.
Неподверженность отрицаниюПодпись может отслеживать источник запроса, клиенты не могут отрицать инициирование легитимных запросов.

toolsetlink@163.com