Get Appointment

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ соврСмСнном Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΌ ΠΌΠΈΡ€Π΅ API (интСрфСйсы программирования ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ) стали Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами. Однако с ростом числа ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΉ ΠΈ популярности API Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² обСспСчСнии ΠΈΡ… бСзопасности ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Одними ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… аспСктов Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ rate limiting (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ частоты запросов), ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ CORS (Cross-Origin Resource Sharing) ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ бСзопасных схСм CORS-прокси. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим соврСмСнныС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ для создания Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹Ρ… API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ трСбованиям бСзопасности ΠΈ удобства использования.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ rate limiting ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½?

Rate limiting β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ количСство запросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊ API Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Данная ΠΌΠ΅Ρ€Π° Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ сСрвСр ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΎΠΊ, Π°Ρ‚Π°ΠΊ Ρ‚ΠΈΠΏΠ° DDoS, спама ΠΈ нСсанкционированного использования рСсурсов.

  • Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠ² ΠΈ Π±ΠΎΡ‚ΠΎΠ²
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° сСрвиса ΠΏΡ€ΠΈ ΠΏΠΈΠΊΠΎΠ²ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅
  • Π‘ΠΏΡ€Π°Π²Π΅Π΄Π»ΠΈΠ²ΠΎΠ΅ распрСдСлСниС рСсурсов ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ

НаиболСС популярныС способы Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ rate limiting:

  • Token Bucket β€” ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запрос «сТигаСт» ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΎΠΊΠ΅Π½. ПополнСниС Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² происходит с Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ.
  • Leaky Bucket β€” запросы ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Β«Π²Π΅Π΄Ρ€ΠΎΒ», ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ.
  • Fixed Window ΠΈ Sliding Window β€” ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства запросов Π·Π° фиксированноС ΠΈΠ»ΠΈ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π’ соврСмСнных API rate limiting часто рСализуСтся Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ API-шлюзов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, NGINX, Kong, AWS API Gateway) ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ спСциализированных middleware для популярных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² (Express.js, Django, Flask ΠΈ Π΄Ρ€.).

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ настройка CORS

CORS (Cross-Origin Resource Sharing) β€” ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ доступ ΠΊ рСсурсам Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с Β«Ρ‡ΡƒΠΆΠΈΡ…Β» Π΄ΠΎΠΌΠ΅Π½ΠΎΠ². Она критичСски Π²Π°ΠΆΠ½Π° ΠΏΡ€ΠΈ создании ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… API, доступных ΠΈΠ· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°.

Настройка CORS позволяСт:

  • Π Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Ρ‚ΡŒ доступ ΠΊ API Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ сайтам ΠΈΠ»ΠΈ прилоТСниям
  • ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ запросов (GET, POST, PUT ΠΈ Π΄Ρ€.) ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ
  • Π£ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ cookie ΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΎΠΌΠ΅Π½Π°ΠΌΠΈ

Для настройки CORS ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ middleware Π½Π° сСрвСрС. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² достаточно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ список Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Ρ… источников (origin), ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ. НапримСр, Π² Express.js это дСлаСтся Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°ΠΊΠ΅Ρ‚ cors:

app.use(cors({
  origin: ['https://trusteddomain.com'],
  methods: ['GET', 'POST'],
  credentials: true
}));

Грамотная настройка CORS ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ нСсанкционированный доступ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅.

БСзопасная схСма CORS-прокси

Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ доступ ΠΊ API ΠΈΠ· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, Π½ΠΎ CORS Π½Π΅ позволяСт Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ рСсурсу. Π’ этом случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ CORS-прокси β€” ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСсылаСт запросы. Однако Π²Π°ΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ CORS-прокси с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ бСзопасности, ΠΈΠ½Π°Ρ‡Π΅ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±Ρ…ΠΎΠ΄Ρƒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΡƒΠ³Ρ€ΠΎΠ·Π°ΠΌ.

БСзопасная схСма CORS-прокси Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ источника запросов ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ
  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… адрСсов
  • Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ²
  • Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ
  • БовмСстноС использованиС с rate limiting ΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ для усилСния Π·Π°Ρ‰ΠΈΡ‚Ρ‹

РСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π½Ρ‹Π΅ собствСнныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π°ΡƒΠ΄ΠΈΡ‚ΠΎΠΌ бСзопасности.

Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ API

  • АутСнтификация ΠΈ авторизация β€” JWT, OAuth2, API-ΠΊΠ»ΡŽΡ‡ΠΈ
  • Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° β€” ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ использованиС HTTPS
  • ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Π°ΡƒΠ΄ΠΈΡ‚ β€” Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°, Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, оповСщСния ΠΎ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ активности
  • ОбновлСниС ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° β€” рСгулярноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ зависимостСй
  • Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ сСрвисов β€” контСйнСризация, микросСрвисы, ограничСния доступа ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ инструмСнты ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

Для эффСктивной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ API Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅ сущСствуСт мноТСство инструмСнтов:

  • API Gateway (Kong, AWS API Gateway, Apigee) β€” Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ доступом, CORS, rate limiting
  • Firewall ΠΈ WAF (Web Application Firewall) β€” Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Π°Ρ‚Π°ΠΊ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
  • Cloudflare, Akamai β€” ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ DDoS-Π·Π°Ρ‰ΠΈΡ‚Ρ‹
  • Middleware ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для популярных языков ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ²

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹Ρ… API β€” это сочСтаниС тСхничСских ΠΌΠ΅Ρ€ ΠΈ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹. РСализация rate limiting, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ настройка CORS ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ бСзопасных CORS-прокси сущСствСнно ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ бСзопасности, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠΉ ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ прилоТСния. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ соврСмСнныС ΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ вашСго API β€” ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ этапС.

Avatar
Raman Sapezhka

CEO Plantago/CTO