Безопасность и приватность
Обзор для администратора: что именно Kizora делает и чего не делает. Без обещаний, которые нельзя проверить.
Минимум прав
Ни один модуль не требует роли «Администратор». Ссылка приглашения запрашивает набор прав под все модули, но право без включённого модуля не используется: соответствующий код не работает вовсе.
Подробности — Минимум прав.
Kizora не выполняет произвольный код
Важно
Ни в своих командах, ни в автоответах, ни в автоматизациях, ни в шаблонах сообщений нет выполнения кода. Ни Python, ни JavaScript, ни shell, ни выражений внутри шаблона.
Всё, что настраивается, — данные закрытой формы: список действий, список условий, список подстановок. Просьба «дайте писать выражения» означает «дайте выполнять чужой код на нашем процессе».
Шаблоны автоответов не вешают бота
Шаблоны разбираются в конечный автомат и ищутся без возвратов: время работы линейно и не зависит от формы шаблона. Шаблон, который повесил бы обычный движок регулярных выражений, здесь считается за миллисекунды или отвергается с понятной причиной.
Подробности — Безопасные шаблоны.
Роли проверяются дважды
Kizora не выдаёт автоматически роль, которая является правом: административную, управляемую интеграцией или стоящую не ниже роли бота. Проверка выполняется и при сохранении настройки, и непосредственно перед выдачей — снимок ролей сервера стареет.
Подробности — Безопасные роли.
Автоматизации ограничены
- Правило не может вызвать само себя: цепочка длиннее трёх обрывается.
- Действия ограничены часовым пределом на сервер.
- Права автора проверяются в момент выполнения, а не создания.
- Подстановки не могут позвать
@everyone.
Наказаний без человека нет
Ни автомодерация, ни anti-raid, ни anti-nuke не банят автоматически. Максимум автомодерации — тайм-аут; максимум защиты сервера — сдерживание на срок и вызов человека. Детектор ошибается, и цена ошибки при бане несравнима с ценой ошибки при карантине.
Вебхуки подписываются
Входящие события проверяются по HMAC-SHA256, сравнение подписи идёт за постоянное время, отметка времени должна быть свежей, идентификатор доставки защищает от повторов.
Секреты хранятся в базе в зашифрованном виде. Хранить их приходится: без ключа проверить подпись невозможно. Следствие названо прямо: доступ к базе означает доступ к каналам, куда пишут эти вебхуки.
Бот не ходит во внутреннюю сеть
Ленты, проверки доступности и любые внешние адреса ограничены: только http и https, только внешние адреса, перенаправление проверяется как новый адрес, ответ ограничен по размеру и времени.
Подробности — Безопасность интеграций.
Журнал по умолчанию не хранит текст
Кто и когда — да. Что было написано — нет, пока администратор не включит это отдельно, со списком исключений и своим сроком хранения. Личные сообщения не журналируются никогда; токены и пароли вырезаются из сохраняемого текста.
Подробности — Журнал событий.
Анонимные функции: что обещается
- Анонимный ящик. Автор скрыт от читателей, но хранится в базе для защиты от злоупотреблений. Наружу не отдаётся нигде.
- Голосования. Рядом с голосом хранится не идентификатор Discord, а производная от него со своей солью голосования. Это не криптографическая анонимность.
Обещание «мы не знаем, кто вы» было бы неправдой, поэтому оно не даётся.
Делегирование и панель
Права Kizora, выданные Discord-ролям, действуют во всех Discord-интерфейсах: командах, кнопках, списках, модальных окнах и при выполнении автоматизаций. Набор собирается заново на каждое действие, поэтому снятое право перестаёт работать со следующей команды, а не после перезапуска.
Веб-панель делегированные права не применяет и применять не может: OAuth Discord сообщает список серверов и права Discord на них, но не сообщает роли участника. Настройка сервера через панель поэтому требует владения сервером или Discord-права «Администратор» либо «Управление сервером». Чувствительные чтения — журнал дел, журнал событий, ответы форм, переписка обращений, секреты интеграций — проверяются в панели отдельно: доступ к серверу там есть у любого его участника, и одного этого недостаточно.
Подробнее: Права Kizora, Политики команд.