
- Python
- FastAPI
- Docker
- Xavfsizlik
Знак доллара сломал пароль
26
Сегодня собрал кино-бота от начала до конца: бот, админ-приложение и развёртывание.
Бот работает по подписке — пользователь платит, админ подтверждает, потом получает фильмы по кодам. Для админа сделал отдельное приложение, потому что лезть в код каждый раз, чтобы поменять цены тарифов или номер карты — плохая затея. Теперь они читаются из базы и правятся в админке.
В конце дня появилась ошибка, отнявшая немало времени. Пароль админа хранится в виде хеша в файле настроек. Сгенерировал хеш, записал в файл, пробую войти — не работает. Пересоздал хеш — снова не работает.
Причина: в bcrypt-хеше есть символ `$`, и встречается он несколько раз. А при чтении файла настроек `$` имеет особое значение — текст после него воспринимается как имя переменной. В итоге до программы доходил испорченный кусок хеша.
Решение: поменял разделитель внутри хеша с `$` на `:`. Теперь в файле настроек нет специальных символов, и хеш доходит целиком.
Неприятность этой ошибки была в том, что сообщение гласило «неверный пароль» — то есть направляло меня совершенно не туда. Пароль был верный, неверным был способ его хранения.
В конце упаковал всё в Docker и выкатил на сервер.