📦 shieldfy / API-Security-Checklist

📄 README-uk.md · 92 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92[English](./README.md) | [繁中版](./README-tw.md) | [简中版](./README-zh.md) | [العربية](./README-ar.md) | [বাংলা](./README-bn.md) | [Čeština](./README-cs.md) | [Deutsch](./README-de.md) | [Ελληνικά](./README-el.md) | [Español](./README-es.md) | [فارسی](./README-fa.md) | [Français](./README-fr.md) | [हिंदी](./README-hi.md) | [Indonesia](./README-id.md) | [Italiano](./README-it.md) | [日本語](./README-ja.md) | [한국어](./README-ko.md) | [ພາສາລາວ](./README-lo.md) | [Македонски](./README-mk.md) | [മലയാളം](./README-ml.md) | [Монгол](./README-mn.md) | [Nederlands](./README-nl.md) | [Polski](./README-pl.md) | [Português (Brasil)](./README-pt_BR.md) | [Русский](./README-ru.md) | [ไทย](./README-th.md) | [Türkçe](./README-tr.md) | [Tiếng Việt](./README-vi.md)

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


---

## Аутентифікація
- [ ] Не використовуйте `Basic Auth` Використовуйте стандартну перевірку справжності (наприклад: JWT, OAuth).
- [ ] Не "винаходьте колесо" в `аутентіфікаціі`, `створенні токенів`, `зберіганні паролей`. Використовуйте стандарти.
- [ ] Використовуйте `Max Retry` і функції jail в Login.
- [ ] Користуйтеся шифруванням для всіх конфіденційних даних.

### JWT (JSON Web Token)
- [ ] Використовуйте випадковий складний ключ (`JWT Secret`), щоб зробити брут форс токена дуже складним.
- [ ] Не виймайте алгоритм з корисного навантаження. Внесіть алгоритм в бекенда (`HS256` або` RS256`).
- [ ] Зробіть термін дії токена (`TTL`, `RTTL`) якомога коротшим.
- [ ] Не зберігайте конфіденційні дані в корисне навантаження JWT, її можна [легко декодувати.](Https://jwt.io/#debugger-io).
- [ ] Уникайте зберігання занадто великої кількості даних. JWT зазвичай спільно використовується в header, і вони мають обмеження на розмір.

## Доступ
- [ ] Обмежте запити (Throttling), щоб уникнути DDoS атак / грубої сили (Brute Force).
- [ ] Використовуйте HTTPS на стороні сервера, щоб уникнути MITM (Man In The Middle Attack / Атака посередника).
- [ ] Використовуйте заголовок `HSTS` (HTTP Strict Transport Security) з SSL, щоб уникнути атаки SSL Strip (перехоплення SSL з'єднань).
- [ ] Вимкніть списки каталогів.
- [ ] Для приватних API, дозвольте доступ лише з IP-адрес/хостів із білого списку.

## Авторизація

### OAuth
- [ ] Завжди перевіряйте `redirect_uri` на стороні сервера, щоб дозволяти тільки URL-адреси з білими списками.
- [ ] Завжди намагайтеся обмінювати код, а не токени (не дозволяти `response_type = token`).
- [ ] Використовуйте параметр `стану` з випадковим хешем, щоб запобігти CSRF в процесі аутентифікації OAuth.
- [ ] Визначте область за замовчуванням і перевірте параметри області для кожної програми.

## Введення
- [ ] Використовуйте відповідний 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.
- [ ] Використовуйте невиконувані stack якщо вони доступні.

## Виведення
- [ ] Надсилайте заголовок `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)
- [ ] Аудит вашого дизайну і реалізації з охопленням модулів / інтеграційних тестів.
- [ ] Використовуйте процес перевірки коду і ігноруйте самоокупність.
- [ ] Переконайтеся, що всі компоненти ваших служб статично скануються за допомогою антивірусів перед відправкою на виробництво, включаючи бібліотеки постачальників та інші залежності.
- [ ] Постійно запускайте тести безпеки (статичний/динамічний аналіз) вашого коду.
- [ ] Перевірте свої залежності (як програмне забезпечення, так і ОС) на відомі вразливості.
- [ ] Створіть рішення відкату для розгортання.

## Моніторинг
- [ ] Використовуйте централізований вхід для всіх служб і компонентів.
- [ ] Використовуйте агентів для моніторингу всього трафіку, помилок, запитів і відповідей.
- [ ] Використовуйте сповіщення для SMS, Slack, Email, Telegram, Kibana, Cloudwatch, тощо.
- [ ] Переконайтеся, що ви не реєструєте жодних конфіденційних даних, таких як кредитні картки, паролі, PIN-коди, тощо.
- [ ] Використовуйте систему IDS та/або IPS для моніторингу запитів і екземплярів API.


---

## Дивись також:
- [yosriady/api-development-tools](https://github.com/yosriady/api-development-tools) - Набір корисних ресурсів для створення RESTful HTTP+JSON API.


---

# Вклад
Не соромтеся робити внесок, відкриваючи цей репозиторій, вносячи деякі зміни і відправляючи `Pull Requests`. З будь-яких питань напишіть нам лист за адресою `team@shieldfy.io`.