bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward

Self-hosted автентифікація для застосунків на Python: Bottle-Cork і харденінг сервера

calendar_month July 17, 2026 schedule 5 хв. читання visibility 21 переглядів
person
Valebyte Team
summarize

TL;DR

  • Bottle-Cork дає невеликим self-hosted застосункам на Python облікові записи, ролі з цілочисловим рівнем, підписані cookie-сесії та потоки реєстрації/скидання. Ставте авторизацію на маршруті, тримайте ключ підпису в секреті й захищайте хост (фаєрвол default-deny, fail2ban, TLS, зворотний проксі) — на сервері, який ви справді контролюєте.

Bottle-Cork — це легка бібліотека автентифікації та авторизації для вебзастосунків на Python, побудованих на мікрофреймворку Bottle. Вона дає невеликому self-hosted застосунку те, що інакше довелося б абияк реалізовувати самому: облікові записи, рольові права, підписані cookie-сесії, реєстрацію та скидання пароля. У цьому посібнику розбираємо, як працює Cork, чим він відрізняється від інших варіантів на Python і як безпечно запустити застосунок з автентифікацією на власному сервері.

Що робить Bottle-Cork — коротко

МожливістьЯк реалізує Cork
Облікові записиЛогін, хеш пароля, e-mail, роль і довільні дані профілю
АвторизаціяІменовані ролі з цілочисловим рівнем; декоратори вимагають мінімальний рівень
СесіїПідписані cookie з терміном дії через Beaker; серверне сховище сесій не потрібне
РеєстраціяПотік з очікуванням підтвердження та токеном у листі
Скидання пароляПідписаний токен з обмеженим часом життя, надісланий поштою
СховищеJSON-файли, MongoDB або SQLAlchemy

Як працює Cork

Cork розташований між маршрутизацією Bottle і вашими обробниками. Кожен захищений запит викликає метод Cork, який перевіряє cookie-сесію, визначає поточного користувача й або пропускає обробник, або перериває виконання редиректом на сторінку входу. Користувачі, ролі та реєстрації, що очікують, зберігаються в бекенді, обраному під час запуску. Для одного невеликого застосунку достатньо JSON; за конкурентного запису переходьте на MongoDB або SQLAlchemy.

Ролі впорядковані за цілочисловим рівнем. admin на рівні 100 може все, що може editor на рівні 50, і більше. Обробники оголошують мінімальний потрібний рівень, тож авторизація виражається один раз — на маршруті, а не розмазана бізнес-логікою.

Мінімальний застосунок з автентифікацією

from bottle import Bottle, request, redirect
from cork import Cork
from beaker.middleware import SessionMiddleware

aaa = Cork('conf_dir') # бекенд: users.json, roles.json, ...
app = Bottle()

@app.post('/login')
def login():
 aaa.login(request.forms.get('user'),
 request.forms.get('pwd'),
 success_redirect='/dashboard',
 fail_redirect='/login')

@app.route('/dashboard')
def dashboard():
 aaa.require(fail_redirect='/login')
 return 'Hello %s' % aaa.current_user.username

@app.route('/admin')
def admin():
 aaa.require(role='admin', fail_redirect='/login')
 return 'Admin area'

wrapped = SessionMiddleware(app, {'session.type': 'cookie',
 'session.encrypt_key': 'CHANGE-ME',
 'session.validate_key': True})

Дві думки, які варто винести, навіть якщо ви ніколи не використаєте Cork: авторизація має стояти на маршруті одним викликом require(), а цілісність сесії цілком залежить від секретного ключа підпису — довгого, випадкового й такого, що не зберігається в дереві вихідного коду.

rocket_launch Швидкий вибір

Шукаєте сервер, який просто працює?

Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.

Переглянути тарифи VPS arrow_forward

Ролі та авторизація

Тримайте кількість ролей невеликою, а розриви рівнів широкими (наприклад 0 = анонім, 30 = користувач, 60 = редактор, 100 = адмін). Широкі розриви дозволяють згодом вставити новий рівень без перенумерації. Ніколи не давайте права за іменем користувача — перевіряйте рівень ролі. Імена змінюються, ними прикриваються в тикетах підтримки, і вони витікають у логи.

Безпека паролів і сесій

Cork зберігає хеші паролів, а не паролі, і підписує cookie-сесії. Це базовий рівень, а не фініш. Задайте реальну мінімальну довжину пароля, обмежте частоту запитів до маршруту входу проти credential stuffing, задайте розумний тайм-аут сесій і змінюйте ключ підпису в разі витоку. Віддавайте все через HTTPS, щоб cookie не можна було прочитати в каналі, і ставте прапорці Secure та HttpOnly.

Bottle-Cork проти інших варіантів на Python

ВаріантФреймворкДля чого кращеКомпроміс
Bottle-CorkBottle / WSGIНевеликі self-hosted застосунки з ролями без БДМінімум екосистеми; пошту й rate-limit підключаєте самі
Flask-LoginFlaskКерування сесіями у застосунках FlaskЛише сесії; ролі й реєстрація — на вас
AuthlibБудь-якийПровайдери та клієнти OAuth2 / OpenID ConnectВажче; надмірно для одного внутрішнього застосунку
Django authDjangoПовноцінні застосунки на ORM DjangoДоведеться прийняти весь фреймворк
Authelia / KeycloakОкремий SSOЗахист кількох сервісів одним входомОкремий сервіс, який сам треба захищати

Якщо у вас уже більше пари self-hosted сервісів, окремий провайдер ідентичності на кшталт Keycloak часто кращий у довгій перспективі — див. наш посібник зі встановлення Keycloak для SSO та IAM. Для одного застосунку на Bottle Cork не заважає.

rocket_launch Швидкий вибір

Шукаєте сервер, який просто працює?

Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.

Переглянути тарифи VPS arrow_forward

Харденінг сервера за вашим входом

Автентифікація не сильніша за машину, на якій працює. Ідеальна сторінка входу марна, якщо порт бази даних відкритий в інтернет або стара адмінка відповідає на 8080. Вважайте сам хост частиною межі автентифікації:

  • Фаєрвол за принципом default-deny. Відкривайте лише 443 (і SSH — за ключем, бажано на нестандартній конфігурації). Інструменти в традиції Firelet, а сьогодні nftables чи ufw, дозволяють явно описати дозволений трафік і перевіряти його як набір правил.
  • Fail2ban на логах входу та SSH, щоб банити джерела перебору.
  • TLS усюди з автопродовженням сертифікатів; весь HTTP — редиректом на HTTPS.
  • Зворотний проксі (nginx або Caddy) перед процесом Python, щоб застосунок не дивився в інтернет напряму.
  • Мінімум привілеїв: запускайте застосунок під непривілейованим користувачем, а файл бекенда робіть читабельним лише для нього.

Перші тридцять хвилин на новій машині задають тон усьому решті — наш чек-лист із захисту виділеного сервера одразу після видачі розбирає фаєрвол, SSH та оновлення за порядком.

Який сервер обрати для self-hosted застосунку

Щойно входять реальні користувачі, вам потрібні передбачувані CPU і пам'ять, фіксований IP та повний контроль над фаєрволом — нічого з цього повною мірою не дає shared-хостинг. Приватний віртуальний сервер годиться для легкого застосунку; виділений сервер — правильний вибір, коли ви зберігаєте реальні дані, тримаєте базу або потребуєте гарантованих ресурсів без шумних сусідів. Якщо обмежує бюджет, недорогий виділений сервер все одно дає ізоляцію й контроль фаєрвола, від яких залежить автентифікація.

Сам Bottle-Cork невеликий — і в цьому суть: важлива не бібліотека, а дисципліна навколо неї — хешовані облікові дані, рольова авторизація, підписані сесії та захищений хост під ними. Зробіть це правильно — і навіть застосунок на Bottle у сотню рядків можна спокійно виставити у відкритий інтернет.

support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.