Захист від DDoS-атак: обмеження впливу атак, які намагаються залити сервер підробленими запитами.
Привіт, колеги!
Чи коли-небудь ви турбувались про безпеку ваших API, створених на Flask?
Одна з поширених загроз — це brute-force атака або DDoS-атака, яка може вивести з ладу ваш сервер.
Не хвилюйтесь! Є потужне рішення для вирішення цієї проблеми: обмеження швидкості запитів (Rate Limiting)! ️
Що таке обмеження швидкості запитів?
Простими словами, обмеження швидкості запитів лімітує кількість запитів, які користувач (або IP-адреса) може надіслати за певний проміжок часу.
Наприклад, можна обмежити лише 100 запитів на хвилину з однієї IP-адреси. Якщо хтось спробує перевищити ліміт, їх запит буде відхилено.
https://www.youtube.com/@halovina
Чому обмеження швидкості важливе для Flask API? ✨
- Запобігання brute-force атакам: ускладнення спроб атакувальникам перевіряти багато комбінацій імен користувачів та паролів за короткий проміжок часу.
- Захист від DDoS-атак: обмеження впливу атак, які намагаються залити сервер підробленими запитами.
- Підтримка доступності API: забезпечення того, щоб API залишалося чутливим і доступним для легітимних користувачів.
- Економія ресурсів сервера: запобігання надмірному використанню ресурсів через різкі стрибки запитів.
Як реалізувати це в 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)
Вищезазначений код обмежує:
- За замовчуванням — 100 запитів на хвилину для всіх ендпоінтів.
- Спеціально для ендпоінту /api/data — 50 запитів на секунду.
Сподіваюся, це буде корисно…!
Перекладено з: Improve Flask API Security: Implement Rate Limiting