Skip to content

Б) Заходи безпеки: Захист вашого API

Після того, як ви автентифікували користувачів або програми, важливо вжити заходів для захисту вашого API від зловмисного використання, несанкціонованого доступу та інших загроз. Ось деякі ключові заходи безпеки:

🚦 → Rate Limiting (Обмеження швидкості)

Що це?

Rate Limiting (обмеження швидкості) - це механізм, який обмежує кількість запитів, які клієнт може зробити до API протягом певного періоду часу. Це як встановлення лічильника ⏱️ для кожного користувача або IP-адреси, щоб запобігти зловживанню.

Як це працює?

Сервер API відстежує кількість запитів від кожного клієнта (ідентифікованого за IP-адресою, API-ключем, токеном тощо) протягом певного часового вікна (наприклад, 100 запитів за хвилину).

Якщо клієнт перевищує встановлений ліміт, сервер тимчасово блокує подальші запити від цього клієнта та повертає помилку (зазвичай 429 Too Many Requests).

Переваги:

  • Захист від DoS/DDoS атак: Допомагає запобігти атакам типу "відмова в обслуговуванні" (Denial of Service) або розподіленим атакам (Distributed Denial of Service), коли зловмисники намагаються перевантажити API великою кількістю запитів.
  • Запобігання зловживанню: Обмежує можливість окремих користувачів або програм надмірно використовувати ресурси API.
  • Справедливе використання: Забезпечує рівномірний доступ до API для всіх клієнтів.
  • Контроль витрат: Допомагає контролювати витрати на інфраструктуру, пов'язані з використанням API.

Реалізація:

Обмеження швидкості може бути реалізовано на різних рівнях:

  • На рівні веб-сервера: Модулі веб-серверів (наприклад, mod_ratelimit для Apache, ngx_http_limit_req_module для Nginx).
  • На рівні API Gateway: Шлюзи API часто мають вбудовані функції обмеження швидкості.
  • На рівні коду застосунку: За допомогою спеціальних бібліотек або власної логіки.

Приклад:

"Цей API дозволяє робити не більше 100 запитів на хвилину з однієї IP-адреси."


🌐 → CORS (Cross-Origin Resource Sharing)

Що це?

CORS (Cross-Origin Resource Sharing) - це механізм безпеки браузера, який контролює, чи дозволено веб-сторінці, що завантажена з одного домену (origin), робити запити до ресурсів (наприклад, API) на іншому домені. Уявіть собі, як браузер виступає прикордонником 🛂, який перевіряє, чи має веб-сайт право "перетинати кордон" і отримувати дані з іншого сайту.

Проблема "Same-Origin Policy":

За замовчуванням браузери застосовують політику "Same-Origin Policy", яка забороняє JavaScript-коду на одній сторінці робити запити до іншого домену з міркувань безпеки (щоб запобігти, наприклад, викраденню даних).

Як CORS вирішує проблему:

CORS дозволяє серверу API явно вказати, які саме інші домени (origins) мають право робити до нього запити. Це робиться за допомогою спеціальних HTTP-заголовків у відповіді сервера.

Основні CORS-заголовки:

  • Access-Control-Allow-Origin: Вказує, яким доменам дозволено доступ до ресурсу. Значенням може бути конкретний домен (наприклад, https://example.com) або * (дозволити доступ з будь-якого домену - використовувати з обережністю!).
  • Access-Control-Allow-Methods: Вказує, які HTTP-методи (GET, POST, PUT, DELETE тощо) дозволені для крос-доменних запитів.
  • Access-Control-Allow-Headers: Вказує, які нестандартні HTTP-заголовки дозволено використовувати у крос-доменних запитах.
  • Access-Control-Allow-Credentials: Вказує, чи можуть крос-доменні запити включати куки та заголовки авторизації.

Як це працює (спрощено):

  1. Браузер клієнта робить крос-доменний запит до API.
  2. Браузер може спочатку відправити так званий "preflight request" (попередній запит) методом OPTIONS з CORS-заголовками, щоб дізнатися про дозволи сервера.
  3. Сервер API відповідає на preflight request заголовками Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers тощо, вказуючи свої CORS-політики.
  4. Якщо політики сервера дозволяють запит клієнта (домен, метод, заголовки), браузер відправляє фактичний запит.
  5. Сервер API відповідає на фактичний запит, також включаючи CORS-заголовки.
  6. Браузер перевіряє CORS-заголовки у відповіді. Якщо вони відповідають політиці безпеки браузера, браузер дозволяє JavaScript-коду отримати доступ до відповіді. Інакше - блокує доступ.

Важливість:

CORS є важливим механізмом безпеки, який дозволяє контролювати, які веб-сайти можуть взаємодіяти з вашим API, запобігаючи потенційним атакам міжсайтового скриптингу (XSS) та іншим загрозам.


🔒 → HTTPS/TLS (HTTP Secure/Transport Layer Security)

Що це?

HTTPS (HTTP Secure) - це безпечна версія протоколу HTTP, яка використовує шифрування TLS/SSL (Transport Layer Security/Secure Sockets Layer) для захисту передачі даних між клієнтом (наприклад, браузером) та сервером API. Уявіть собі, як ваші інтернет-дані подорожують через зашифрований тунель tunnel 🛡️, який ніхто не може підглянути.

Як це працює:

  1. TLS/SSL Handshake (Рукостискання): Коли клієнт намагається підключитися до HTTPS-сайту або API, відбувається процес "рукостискання". Клієнт і сервер обмінюються інформацією для встановлення безпечного з'єднання, включаючи вибір криптографічних алгоритмів та обмін сертифікатами.
  2. Сертифікат SSL/TLS: Сервер надає клієнту свій сертифікат SSL/TLS. Цей сертифікат містить інформацію про ідентичність сервера та його публічний ключ. Він підписується довіреним центром сертифікації (CA), що підтверджує легітимність сервера.
  3. Шифрування: Після успішного рукостискання клієнт і сервер використовують узгоджені криптографічні алгоритми та ключі для шифрування всіх даних, що передаються між ними. Це означає, що навіть якщо хтось перехопить трафік, він побачить лише зашифровані дані, які буде складно розшифрувати без відповідних ключів.

Переваги:

  • Конфіденційність: Запобігає перехопленню та прочитанню даних третіми особами (наприклад, хакерами, інтернет-провайдерами).
  • Цілісність: Гарантує, що дані не були змінені під час передачі.
  • Автентичність: Сертифікат SSL/TLS допомагає клієнту переконатися, що він спілкується з легітимним сервером, а не з підробленим сайтом (хоча це більше стосується перевірки домену).

Важливість для API:

Використання HTTPS/TLS є абсолютно необхідним для будь-якого API, який обробляє конфіденційні дані (наприклад, облікові дані користувачів, платіжну інформацію) або будь-яку іншу інформацію, яку не слід передавати у відкритому вигляді.

Реалізація:

Для впровадження HTTPS/TLS потрібно:

  • Отримати сертифікат SSL/TLS для вашого домену.
  • Налаштувати ваш веб-сервер (наприклад, Apache, Nginx) для використання цього сертифіката та протоколу HTTPS.
  • Переконатися, що всі клієнтські запити до API надсилаються через протокол https://.

Застосування цих заходів безпеки є критично важливим для забезпечення надійності, конфіденційності та захисту вашого API та його користувачів.