0x80070005, токен мог быть получен при первом вызове приложения и положен в local storage, а следующие попытки запуска приложения просто забирают его из local storage и сервер не опрашивают.
Естественно, его могут обфусцировать, чтобы было непросто найти.
Сервис должен быть не "для базы данных", а реализовавать какую-то функциональную бизнес-логику. А при такой постановке вопроса всё выглядит так, будто бы решили сделать сервис для хитровывернутого выполнения SQL-запросов.
bbquite, так и не надо использовать как строку. Для float 123 и 123.00 это одно и то же. Для денег float плох ещё из-за неточности его математики, что приводит к казусам типа https://0.30000000000000004.com/
wg никто никогда не считал неопределяемым. У него киллер-фича в другом: простая имплементация в ядре без юзерспейса и шифры, которые эффективно работают практически везде. Как стал протокол часто применяться - научились определять.
Zettabyte, redis - изначально тот же memcached (kv-хранилище) с его же интерфейсом, который хранил копию данных в памяти также и на диске. Но вроде с тех пор умеет всякие очереди, кластерность итд. Я его кроме как замены memcached сто лет назад и то в тестовых целях не пользовал, так что не знаю.
Конечные автоматы тут это просто про то, что для упрощения разработки не программист куда-то у себя в боте складирует, какой user_id в каком состоянии, а библиотека это делает сама, вызывая разные обработчики в зависимости от предыстории обмена сообщениями с пользоватлем. Это хорошо, когда делаешь пошаговые взаимодействия (например, когда надо задать серию вопросов и выдать результат обработки), и довольно плохо, когда надо хранить персистентно информацию о пользователе, потому что все данные являются свойствами текущего состояния, а не пользователя (например, бот знакомств в начале регистрации в сервисе спрашивает у пользователя его город/возраст/предпочтения). Но это можно совмещать (например, с помощью FSM зададим серию вопросов, а итог запишем уже в свою базу).
Формально это действительно конечный автомат (граф состояний, между которыми перемещается пользователь в процессе взаимодействия), но с практической точки зрения это то же самое, что можно было бы написать на if-then-else и глобальном словаре с id пользователя с id в качестве ключа. Просто так разрабатывать сильно неудобно. FSM намного удобнее даже для тривиальных взаимодействий, позволяя делать короткие функции, обслуживающие отдельные шаги.
Что касается сохранения данных, то aiogram позволяет в качестве хранилища состояний использовать не только Memory storage, но и файл на диске либо базу данных.
Роберт Емельянов, для того чтобы давать советы, нужно знать много о специфике данных, частоте их обновления, объёмах итд итп. Если там данные такие, что после первого слива контора может закрыаться то это одно, а если данные устаревают черех 3 часа - другое. В вопросе совершенно непонятен уровень угроз итд итп.
Серебрянной пули всё равно нет. Понятие утечки слишком абстрактно, его сложно формализовать и выразить в измеримых показателях. Это нужно делать с учётом специфики данных, специфики работы сотрудников компании итд итп.
В любом случае, когда данные критичны, то их не хранят в единственной шаре, доступной всем сотрудникам. И для защиты применяют сурьёзные методы.
Просто пример сурьёзного решения, из числа таких, что могут применяться в какой-нить банковской сфере. Для доступа к данным надо поднять VPN до некоторого сервера. Через него доступ по RDP на сервер, на котором нужно поднять ещё один VPN и с него ещё один RDP. На обоих серверах скриншотятся все действия. Прямого сетевого доступа нет. Максимум - можно скриншотить самому картинки, но много не наскриншотишь. Ещё и можно данные отдавать через специальные интерфейсы, которые логгируют обращения, а также маскируют то, что не нужно соответствующему сотруднику.
Например, специалисту первой линии поддержки может быть не нужно знать суммы платежей (по крайней мере точные), только проверять что они обработаны или что пользователю ушло уведомление по почте/смс. Можно не показывать номер телефона или номер паспорта. Курьеру сумму заказа и его содержание знать не нужно, ему нужен только номер, число упаковок и адрес куда доставить. Итд итп.
Именно так и защищают данные.
Вообще, вопросы такого характера обычно появляются не тогда, когда есть какая-то внятная политика защиты данных, а когда случился какой-нить внутренний скандал и надо срочно изобразить деятельность, в которой бы скандал был якобы преодолён. Проблема в том, что обычно скандал второй раз не возникает никогда, а случается что-нибудь совсем другое. Или через столько лет, что все уже всё забыли и на любые политики безопасности все уже снова наплевали.
Эту защиту легко обойти, достаточно просто скачивать файлы с такой интенсивностью, какую проявляет вяло перебирающий файлики человек.
Тем более что специфика неясна. Если там 500 файлов, то их можно просто по 50 штук в день за две недели слить. Автоматизироанно идентифицировать это как злонамеренное действие - не такая уж и тривиальная проблема.
Progrimer, если в событии не прилетает достаточно информации, то, скорее всего, придётся где-то запоминать предыдущий тип контента каждого сообщения. Чтобы точно знать, какой он был и на что он изменился.
Может быть и дохнущий БП монитора. Помню, был один монитор, которому немного продлили жизнь, прикладывая к БП поролоновую губку, намоченную холодной водой.
Если пользователям не даётся доступ напрямую в s3, а вместо этого доступом к файлам управляет собственный сервис, то можно все вопросы с доступом решать на уровне своего сервиса.
При этом можно не прокачивать сами файлы через этот сервис, если использовать presigned url с ограниченным сроком действия.
Но как уже написали в ответах, покупка готового s3-сервиса может быть дорогим решением, дешевле поднять свой s3 на базе minio, ceph или других решений. Но придётся потрудиться с его настройкой и сопровождением.
В первом случае вернулось три разных размера (один из которых совсем мизерный).
Во втором случае вернулось две одинаковых превьюшки в теге thumbnail и thumb, а также оригинальный непожатый вариант файла.
Файл, который я загружал, имеет размер 41154 и разрешение 257x340.
Скорее всего, вот то что на скриншоте - это аналог первого случая и первый вариант из ответа микроразмерного разрешения для малюсенькой превьюшки.