Как защитить веб-запросы с помощью одноразовых номеров
Проблема
Пользователь нашел способ использовать систему проверки запросов системы оценки веб-сайта, дублирование важных HTTP-запросов. Это ставит под угрозу целостность и надежность системы.
Решение: внедрение системы одноразовых номеров
Нонсы (количество, используемое один раз) — это значения, которые предотвращают атаки повтора запроса, гарантируя, что конкретный запрос не был сделано раньше. Вот распространенный и безопасный способ реализации системы nonce:
Генерация и проверка Nonce на стороне сервера
Функция getNonce()
- Идентифицирует клиента, отправляющего запрос (например, по имени пользователя или сеансу).
- Генерирует случайный одноразовый номер с использованием защищенной хеш-функции (например, SHA512).
- Сохраняет одноразовый номер в базе данных, связанной с идентификатор клиента.
- Возвращает nonce клиенту.
verifyNonce() Функция
- Извлекает ранее сохраненный nonce для идентификатора клиента.
- Удаляет nonce из базы данных (чтобы предотвратить его повторное использование).
- Генерирует хэш с предоставленным клиентом nonce (cnonce), данными запроса и секретная соль.
- Сравнивает сгенерированный хэш с хешем, предоставленным клиентом.
- Возвращает true, если хэши совпадают, указывая действительный одноразовый номер.
Клиент -Side Nonce Usage
sendData() Функция
- Получает nonce с сервера с помощью функции getNonce().
- Генерирует индивидуальный одноразовый номер клиента (cnonce) с использованием безопасной хеш-функции.
- Объединяет одноразовый номер сервера, одноразовый номер клиента и данные запроса.
- Генерирует хэш из объединенного значения.
- Отправляет запрос на сервер, включая данные, cnonce и хеш.
Соображения безопасности
- Генерация случайного Nonce: The makeRandomString( ) функция должна генерировать крайне непредсказуемые случайные числа для повышения безопасности.
- Безопасная хэш-функция: Используйте надежную хеш-функцию, такую как SHA512 или bcrypt, для хеш-вычислений, связанных с nonce.
- Одноразовое использование по запросу: Одноразовые номера следует использовать только один раз и удалять из хранилища во избежание атак повторного воспроизведения.