Внимание! Дистрибутив RK-CMS распространяется исключительно через сайт rk-cms.ru. Загрузка копий со сторонних ресурсов может привести к потере данных или установке вредоносного ПО.

Меню
    300 140

    Проектируя API, легко забыть о безопасности и надёжности. Ниже - шесть частых проблем, из-за которых страдают сервисы и пользователи.

    1. Передача параметров через GET

    Когда секретные данные (пароль, номер карты) попадают в URL, они сохраняются в логах сервера, истории браузера и могут быть подсмотрены. Поэтому для любых чувствительных данных используйте POST или PUT, передавая их в теле запроса через HTTPS.

    2. Передача секретного ключа в каждом запросе

    Если клиент каждый раз отправляет один и тот же ключ, его легко украсть или перехватить. Вместо этого мы используем зашифрованную сигнатуру: сам ключ никогда не передаётся, а каждый запрос подписывается с его помощью. Сервер проверяет подпись, не получая самого ключа. Это снижает риск кражи.

    3. Открытый ключ в базе данных

    Хранить ключи или пароли в открытом виде в БД опасно: если базу украдут, злоумышленник сможет отправлять запросы от имени пользователей. Поэтому в базе должны лежать только хеши или зашифрованные значения, из которых нельзя восстановить исходный секрет.

    4. Нет защиты от Race Conditions

    Одновременные запросы могут привести к двойному списанию средств или другим ошибкам. Nonce здесь не поможет - он защищает от повторов, но не от гонок. Мы используем атомарную файловую защиту: операции проверки и изменения данных выполняются как единое целое, поэтому параллельные запросы не могут нарушить целостность.

    5. Нет уникального идентификатора запроса

    Если клиент повторяет запрос из-за сбоя сети, а сервер не различает дубликаты, одна и та же операция может выполниться дважды. Чтобы этого избежать, клиент должен присылать уникальный идентификатор (например, UUID), а сервер - сохранять его и игнорировать повторные запросы с тем же ID.

    6. JSON передаёт только float

    Для финансовых данных тип float неприемлем: он даёт ошибки округления (например, 0.1 + 0.2 = 0.30000000000000004). В JSON нужно передавать деньги строками или целыми числами в минимальных единицах (копейках).

    Эти шесть пунктов - базовый минимум, который убережёт ваше API от самых распространённых уязвимостей и ошибок.

    Для улучшения работы сайта и его взаимодействия с пользователями мы используем файлы cookie (узнать подробнее).

    Продолжая работу с сайтом, Вы разрешаете использование cookie-файлов. Вы всегда можете отключить файлы cookie в настройках Вашего браузера.