🛡Безопасность API: базовые принципы



Проектирование API не ограничивается реализацией HTTP запросов в определенном стиле и формированием ответов в соответствии со спецификацией. Крайне важно уделить внимание вопросам безопасности.



Способы обеспечения безопасности



1️⃣ Использование зашифрованного протокола TLS. Рекомендуется шифровать трафик запросов и ответов API для защиты конфиденциальности информации при передаче по незащищенным сетям. Общепринятой практикой является использование протокола шифрования TLS. Поверх TLS работает HTTPS, о котором мы уже писали.



2️⃣ Авторизация запросов. Авторизация подразумевает, что данному клиенту разрешено выполнять операцию над ресурсом. Следует учитывать:

▪️Проверку прав доступа к объектам при каждом запросе.

▪️Проверку того, что залогиненный пользователь имеет доступ только к разрешенным объектам.

▪️ID объектов должны быть сложными для подбора, например в виде UUID, а не простая последовательность 1, 2, 3.



3️⃣ Проверка содержимого запроса. Необходимо проверять, что запрос не содержит опасных компонентов (например, SQL-инъекции, XSS-атаки, DTD-атаки). При этом недопустимо автоматически десериализовать пришедшие данные и записывать их в БД без каких-либо проверок бизнес-логики и прав доступа.



4️⃣ Проверка скорости и количества запросов: контроль, что запросы API не превышают определенной скорости для защиты сервиса от перегрузки или атак. Может настраивать квоты запросов на клиента. Сюда входит, например, блокировка IP по результатам неудачных попыток входа.



5️⃣ Контроль размера запроса: проверяет, что полезная нагрузка запроса не превышает ограничения для операции API. Предотвращает попадание неправильных (больших) запросов к сервису.



6️⃣ Мониторинг безопасности: логировние ключевых событий, таких как неудачные попытки аутентификации, отказы в доступе, ошибки валидации входных данных. Также следует мониторить инфраструктуру, сетевую активность, загрузку ОС. Важно настроить алерты, чтобы максимально оперативно реагировать на риски.



7️⃣ Если API непубличное, следует ограничить адреса, с которых разрешено использование API. Также можно ограничивать HTTP методы, которые могут быть использованы для доступа к API и задать список заголовков, которые сервер может принимать.



📄 Стандарты в области безопасности API

1. OWASP (Open Web Application Security Project), а также есть стьтья-перевод на русском на Хабре

2. RFC 7519 — JSON Web Token (JWT)

3. OAuth 2.0, простым языком: статья на Хабре



📑 Статьи

1. Безопасность REST API от А до ПИ

2. Рекомендации по проектированию безопасности API для внутренних и облачных систем

3. Требования аутентификации и авторизации API — раздел открытого курса по документированию API

4. Защита API от атак — статья на Tadviser от ИБ-компании

5. Требования к информационной безопасности: кого вовлекать в выявление? — статья Алексея Краснова на Systems.Education



Видео

1. Защита API и микросервисной инфраструктуры — доклад директора ИБ-компании

2. Тестирование безопасности API — Катерина Овеченко. QA Fest 2019

3. Курс видеолекций "Безопасность интернет-приложений" от Mail.ru Group, МГТУ им. Н.Э. Баумана (осень 2014)

4. Основы безопасности веб-приложений — вебинар от Skillbox

5. Открытая лекция Академии Яндекса про безопасность веб-приложений (2017)

6. Информационная безопасность в аналитике — доклад Галины Матвеевой на конференции Analyst Days-9

7. Информационная безопасность и криптография. Точка зрения аналитика — доклад Сергея Евтуховича на конференции Analyst Days #15



#безопасность #api