Безопасность¶
Юзербот работает от имени вашего аккаунта, поэтому Uroboros защищает его с трёх сторон: кто может вызывать команды, какой код можно установить и что этот код может делать во время работы.
Это не песочница. Сторонний модуль выполняется в одном процессе с ботом, и решительный автор при желании обойдёт проверки. Они защищают от типичного вредного кода и от случайностей, а не от любого Python. Ставьте модули, которым доверяете.
Кто может вызывать команды¶
Свои сообщения (исходящие) — всегда. Команды из чужих сообщений выполняются, только если отправителю хватает уровня доступа:
| Уровень | Кто | Команды по умолчанию |
|---|---|---|
owner |
этот аккаунт и добавленные .owner add |
всё, в том числе .e, .t, .dlm, .ulm, .restore, .update |
sudo |
добавленные .sudo add |
большинство команд |
support |
добавленные .support add |
справка, .ping, .info |
everyone |
все | только команды, которым так выставили уровень |
Каждый уровень включает следующие: owner может всё, что sudo, и так далее. Уровень любой команды меняется
командой .security <команда> <уровень>, .security <команда> default возвращает уровень по умолчанию.
.security без аргументов показывает группы, изменённые права, замороженные и доверенные модули.
Проверка кода при установке¶
Перед .dlm, .lm, .uplm и .restore Uroboros читает исходник модуля и ищет опасное:
- доступ к сессии:
client.session.save(),StringSession.save,auth_key,api_hash, файлы.session,uroboros.db; - запросы, которыми угоняют аккаунт: завершение сеансов, удаление аккаунта, смена пароля 2FA или номера, вход по QR, выход из аккаунта, траты звёзд и передача подарков;
- скрытый код:
exec/evalотbase64,zlib,marshal; - системные настройки Uroboros: права доступа, защита от флуда, токен inline-бота.
Модуль с опасным кодом не установится, пока вы явно не подтвердите: кнопкой «Установить всё равно» или флагом
-f (.dlm -f, .uplm -f, .restore -f). Это касается и модулей из подключённых репозиториев.
Подозрительное — переменные окружения, запуск команд системы, удаление файлов, config.json, exec от строки,
подписка на каналы — показывается в ответе отдельным блоком, но установке не мешает.
Модуль может объявить, что ему нужно: # meta permissions: network, files. Права показываются перед установкой,
а если код использует необъявленное, вы увидите предупреждение. Подробнее — в
Как писать модули.
Источник и версия модуля¶
- Модули скачиваются только по https, перенаправления на http не принимаются.
- Модуль из неподключённого источника ставится только после подтверждения: видно, откуда он и сколько в нём строк.
- Модули с GitHub закрепляются на коммите: файл скачивается по ссылке на конкретный SHA, и в подтверждении видно, какой коммит ставится.
.uplmсначала показывает, что изменилось в каждом модуле, и обновляет после подтверждения.- Uroboros хранит sha256 файлов установленных модулей. Если файл изменили в обход Uroboros и в нём появился опасный код, при запуске модуль не загрузится.
- В
# requires:допустимы только имена пакетов с версиями: без ссылок и опций pip.
Защита во время работы¶
Сторонний модуль не может:
- читать
self.client.session; - открывать, удалять и переименовывать файлы сессии,
config.jsonиuroboros.db, передавать их в команды системы; - отправлять запросы, которые угоняют аккаунт или тратят деньги (те же, что ищет проверка при установке).
Попытка заканчивается ошибкой PermissionError, действие не выполняется, а в «Избранное» приходит
уведомление, какой модуль и что пытался сделать.
Ограничения снимаются для модуля, опасный код которого вы подтвердили при установке, и для модуля, которому вы
явно разрешили всё: .security trust <модуль>. Вернуть защиту — .security untrust <модуль>.
Защита от флуда¶
Запросы к Telegram из стороннего модуля считаются. Если модуль отправил слишком много запросов (по умолчанию
больше 60 за 30 секунд), он замораживается на 5 минут, а вам приходит уведомление. Настройка —
.security flood <запросов> <секунд> <заморозка>, выключить — .security flood off, разморозить —
.security unfreeze <модуль>.
Данные¶
Сессия, config.json (api_id и api_hash) и база данных лежат в data/. Это доступ к аккаунту: не публикуйте
эту папку и не отправляйте её никому. .backup сохраняет базу данных и модули, но не сессию и не
config.json.