Skip to content

Latest commit

 

History

History
67 lines (55 loc) · 8.68 KB

README-uk.md

File metadata and controls

67 lines (55 loc) · 8.68 KB

English | 中文版 | Português (Brasil) | Français | 한국의 | Nederlands | Indonesia | ไทย | Русский

Контрольний список безпеки 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].