English | 中文版 | Português (Brasil) | Français | 한국의 | Nederlands | Indonesia | ไทย | Русский
Контрольний список найбільш важливих контрзаходів безпеки при розробці, тестуванні та випуску вашого API.
- Не використовуйте
Basic Auth
Використовуйте стандартну перевірку справжності (наприклад: JWT, OAuth). - Не "винаходьте колесо" в
аутентіфікаціі
,створенні токенів
,зберіганні паролей
. Використовуйте стандарти. - Використовуйте
Max Retry
і функції jail в Login. - Користуйтеся шифруванням для всіх конфіденційних даних.
- Використовуйте випадковий складний ключ (
JWT Secret
), щоб зробити брут форс токена дуже складним. - Не виймайте алгоритм з корисного навантаження. Внесіть алгоритм в бекенда (
HS256
абоRS256
). - Зробіть термін дії токена (
TTL
,RTTL
) якомога коротшим. - Не зберігайте конфіденційні дані в корисне навантаження JWT, її можна легко декодувати..
- Завжди перевіряйте
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
і т.д.).
- Аудит вашого дизайну і реалізації з охопленням модулів / інтеграційних тестів.
- Використовуйте процес перевірки коду і ігноруйте самоокупність.
- Переконайтеся, що всі компоненти ваших служб статично скануються за допомогою антивірусів перед відправкою на виробництво, включаючи бібліотеки постачальників та інші залежності.
- Створіть рішення відкату для розгортання.
Не соромтеся робити внесок, відкриваючи цей репозиторій, вносячи деякі зміни і відправляючи Pull Requests
. З будь-яких питань напишіть нам лист за адресою [email protected]
.