English | 繁中版 | 简中版 | Português (Brasil) | Français | 한국어 | Nederlands | Indonesia | ไทย | Русский | Español | Italiano | 日本語 | Deutsch | Türkçe | Tiếng Việt | Монгол | हिंदी | العربية | Polski | Македонски | ລາວ
Контрольний список найбільш важливих контрзаходів безпеки при розробці, тестуванні та випуску вашого 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і т.д.).
- Аудит вашого дизайну і реалізації з охопленням модулів / інтеграційних тестів.
- Використовуйте процес перевірки коду і ігноруйте самоокупність.
- Переконайтеся, що всі компоненти ваших служб статично скануються за допомогою антивірусів перед відправкою на виробництво, включаючи бібліотеки постачальників та інші залежності.
- Створіть рішення відкату для розгортання.
- yosriady/api-development-tools - Набір корисних ресурсів для створення RESTful HTTP+JSON API.
Не соромтеся робити внесок, відкриваючи цей репозиторій, вносячи деякі зміни і відправляючи Pull Requests. З будь-яких питань напишіть нам лист за адресою team@shieldfy.io.