Skip to content

Latest commit

 

History

History
75 lines (58 loc) · 9.06 KB

README-ru.md

File metadata and controls

75 lines (58 loc) · 9.06 KB

English | 中文版 | Português (Brasil) | Français | 한국어 | Nederlands | Indonesia | ไทย | Українська | Español | Italiano | 日本語 | Deutsch | Türkçe | Tiếng Việt | Монгол | हिंदी | العربية

Контрольный список безопасности API

Контрольный список наиболее важных контрмер безопасности при разработке, тестировании и выпуске вашего API.


Аутентификация

  • Не используйте Basic Auth Используйте стандартную проверку подлинности (например: JWT, OAuth).
  • Не "изобретайте колесо" в аутентификации, создании токенов, хранении паролей. Используйте стандарты.
  • Используйте Max Retry и функции jail в Login.
  • Используйте шифрование для всех конфиденциальных данных.

JWT (JSON Web Token)

  • Используйте случайный сложный ключ (JWT Secret), чтобы сделать брут форс токена очень сложным.
  • Не извлекайте алгоритм из полезной нагрузки. Внесите алгоритм в бэкэнд (HS256 или RS256).
  • Сделайте срок действия токена (TTL, RTTL) как можно короче.
  • Не храните конфиденциальные данные в полезной нагрузке JWT, ее можно легко декодировать..

OAuth

  • Всегда проверяйте redirect_uri на стороне сервера, чтобы разрешать только URL-адреса с белыми списками.
  • Всегда старайтесь обменивать код, а не токены (не разрешать response_type=token).
  • Используйте параметр состояния со случайным хешем, чтобы предотвратить CSRF в процессе аутентификации OAuth.
  • Определите область по умолчанию и проверьте параметры области для каждого приложения.

Доступ

  • Ограничьте запросы (Throttling), чтобы избежать DDoS атак / грубой силы (Brute Force).
  • Используйте HTTPS на стороне сервера, чтобы избежать MITM (Man In The Middle Attack / Атака посредника).
  • Используйте заголовок HSTS (HTTP Strict Transport Security) с SSL, чтобы избежать атаки SSL Strip (перехват SSL соединений).

Ввод

  • Используйте соответствующий HTTP-метод в соответствии с операцией: GET (чтение), POST (создание), PUT / PATCH (замена / обновление) и DELETE (для удаления записи), а также ответьте 405 Method Not Allowed, если запрошенный метод не подходит для запрашиваемого ресурса.
  • Подтвердите тип содержимого по запросу "Принять заголовок" (Консолидация контента), чтобы разрешить только поддерживаемый формат (например, application/xml, application/json и т.д.) И отвечайте с недопустимым ответом 406, если он не согласован.
  • Проверяйте содержимое опубликованных данных типа контента по мере их принятия (например, application/x-www-form-urlencoded, multipart/form-data, application/json и т.д.).
  • Проверьте пользовательский ввод во избежание распространенных уязвимостей (например: XSS, SQL-инъекций, удаленное выполнение кода и т.д.).
  • Не используйте конфиденциальные данные (учетные данные, пароли, маркеры безопасности или ключи API) в URL-адресе, но используйте стандартный заголовок авторизации.
  • Используйте службу шлюза API, чтобы активировать кеширование, ограничение скорости, спайк-арест и динамическое развертывание ресурсов API.

Обработка

  • Проверьте, защищены ли все конечные точки за аутентификацией, чтобы не нарушить процедуру проверки подлинности.
  • Следует избегать идентификатора пользователя собственного ресурса. Используйте /me/orders вместо /user/654321/orders.
  • Не включайте автоинкремент для ID. Вместо этого используйте UUID.
  • Если вы разбираете XML-файлы, убедитесь, что синтаксический анализ сущностей не включен, чтобы избежать атаки на внешний объект XML (XML external entity).
  • Если вы разбираете XML-файлы, убедитесь, что расширение сущности не включено, чтобы избежать Billion Laughs / XML bomb с помощью экспоненциальной атаки расширения сущностей.
  • Используйте CDN для загрузки файлов.
  • Если вы имеете дело с огромным количеством данных, используйте Workers and Queues, чтобы обрабатывать как можно больше в фоновом режиме и быстро возвращать ответ, чтобы избежать блокировки HTTP.
  • Не забудьте выключить режим DEBUG.

Вывод

  • Отправляйте заголовок X-Content-Type-Options: nosniff.
  • Отправляйте заголовок X-Frame-Options: deny.
  • Отправляйте заголовок Content-Security-Policy: default-src 'none'.
  • Удалите заголовки отпечатков пальцев - X-Powered-By, Server, X-AspNet-Version и т.д.
  • Принудите тип содержимого для вашего ответа, если вы вернете application/json, тогда ваш тип содержимого ответа будет application/json.
  • Не возвращайте конфиденциальные данные, такие как учетные данные, пароли, токены безопасности.
  • Возвращайте код состояния в соответствии с завершенной работой. (Например: 200 OK, 400 Bad Request, 401 Unauthorized, 405 Method Not Allowed и т.д.).

Непрерывная интеграция и Непрерывная доставка (CI & CD)

  • Аудит вашего дизайна и реализации с охватом модулей/интеграционных тестов.
  • Используйте процесс проверки кода и игнорируйте самоокупаемость.
  • Убедитесь, что все компоненты ваших служб статически сканируются с помощью антивирусов перед отпракой на производство, включая библиотеки поставщиков и другие зависимости.
  • Создайте решение отката для развертывания.

Смотрите также:


Вклад

Не стесняйтесь вносить вклад, открывая этот репозиторий, внося некоторые изменения и отправляя Pull Requests. По любым вопросам напишите нам письмо по адресу [email protected].