Безопасность REST API
Привет! Мне вдруг стало интересно, а есть ли у вас политика безопасности для API?
Давайте обсудим полезные требования, например, что любой эндпоинт, который работает с данными пользователя должен быть за аутентификацией и обязательно логироваться. Добавляйте свои требования в комментарии, думаю многим будет интересно и полезно.
OWASP уже предложил несколько стандартных пунктов в своем документе:
— Использование HTTPS: все интерфейсы должны работать по HTTPS протоколу, поскольку в передаче данных присутствуют токены, пароли, возможно, конфиденциальная информация.
— Контроль доступа: не должно быть публичных интерфейсов, которые работают с чувствительными данными.
— Ограничение использования HTTP-методов: каждый интерфейс API должен работать только с нужными методами, например GET, POST, PUT. На все остальные методы сервер должен возвращать 405 Method not allowed.
— Валидация данных: на эту тему уже много всего написано) параметризация, ограничение по длине, санитизация.
— Использование точного content type: если приложение отдает JSON, то content type обязательно должен быть application/json, иначе возможны атаки, например XSS.
— Обработка ошибок: исключать подробный вывод ошибок приложения пользователю, например, стектрейсы или экспешены.
— Логирование: тут все должно быть понятно, пишем audit log, коррелируем события, выявляем аномалии.
— Использование заголовков безопасности: не забываем про заголовки, такие как HSTS, CSP, X-Frame и т.д.
И еще много-много всего интересного можно найти для себя, прочитав тот самый REST Security Cheat Sheet.
Например, когда я разбираю дизайн API, люблю делить интерфейсы по уровням критичности, допустим:
- работают с финансами — Critical
- работают с данными пользователей — High
- работают с данными приложения/окружения косвенно с данными пользователя — Medium
- работают со статикой, например, изображения — Low
- работают с открытыми данными приложения — Info
Каждая такая градация, должна покрываться соответствующими мерами, например, Critical обязательно находится под мониторингом и логированием 24/7, должны быть за аутентификацией и так далее, все зависит от модели угроз.
Делюсь интересными ссылками по безопасности API:
- API Security Checklist: Cheatsheet
- API Audit Checklist
- JSON Web Token Security Cheat Sheet
- REST API Design Guide
Post #39
533
- 👍 1