Покращення безпеки Flask API: реалізація обмеження швидкості запитів

Захист від DDoS-атак: обмеження впливу атак, які намагаються залити сервер підробленими запитами.

pic

Привіт, колеги!

Чи коли-небудь ви турбувались про безпеку ваших API, створених на Flask?

Одна з поширених загроз — це brute-force атака або DDoS-атака, яка може вивести з ладу ваш сервер.

Не хвилюйтесь! Є потужне рішення для вирішення цієї проблеми: обмеження швидкості запитів (Rate Limiting)! ️

Що таке обмеження швидкості запитів?

Простими словами, обмеження швидкості запитів лімітує кількість запитів, які користувач (або IP-адреса) може надіслати за певний проміжок часу.

Наприклад, можна обмежити лише 100 запитів на хвилину з однієї IP-адреси. Якщо хтось спробує перевищити ліміт, їх запит буде відхилено.

https://www.youtube.com/@halovina

Чому обмеження швидкості важливе для Flask API? ✨

  1. Запобігання brute-force атакам: ускладнення спроб атакувальникам перевіряти багато комбінацій імен користувачів та паролів за короткий проміжок часу.
  2. Захист від DDoS-атак: обмеження впливу атак, які намагаються залити сервер підробленими запитами.
  3. Підтримка доступності API: забезпечення того, щоб API залишалося чутливим і доступним для легітимних користувачів.
  4. Економія ресурсів сервера: запобігання надмірному використанню ресурсів через різкі стрибки запитів.

Як реалізувати це в Flask?

Є кілька способів реалізувати обмеження швидкості запитів у Flask, одним із яких є використання розширення Flask-Limiter.

Простий приклад:

from flask import Flask  
from flask_limiter import Limiter  
from flask_limiter.util import get_remote_address  

app = Flask(__name__)  
limiter = Limiter(  
 get_remote_address,  
 app=app,  
 default_limits=["100 per minute"] # 100 запитів на хвилину  
)  

@app.route("/api/data")  
@limiter.limit("50/second") # Додаткові спеціальні обмеження для цього ендпоінту  
def get_data():  
 return {"message": "Дані успішно отримано"}  

if __name__ == "__main__":  
 app.run(debug=True)

Вищезазначений код обмежує:

  1. За замовчуванням — 100 запитів на хвилину для всіх ендпоінтів.
  2. Спеціально для ендпоінту /api/data — 50 запитів на секунду.

Сподіваюся, це буде корисно…!

Перекладено з: Improve Flask API Security: Implement Rate Limiting

Leave a Reply

Your email address will not be published. Required fields are marked *