kodukeelНачать бесплатноНачать бесплатно

Доверие и безопасность

Обновлено 5 сентября 2026

Эта страница переведена с помощью ИИ, и носитель языка её ещё не проверял. A machine translated this page, and no native speaker has checked it yet.

Эта страница для тех, кто решает, можно ли доверить Kodukeel классу, команде или грантовому проекту. Сначала идут короткие ответы, и каждый ведёт к подробностям ниже.

Кто управляет этой копией

Оператор этой установки: Upthink Solutions OÜ, регистрационный код 16683946, адрес: Aiandi tn 8/2-28, Mustamäe linnaosa, 12915 Tallinn, Harju maakond, Estonia. Это контролёр данных каждого ученика здесь и сторона, с которой заключался бы любой договор.

Один адрес, и письмо на него читает живой человек, будь то вопрос о данных, сообщение об уязвимости или вопрос о закупке: privacy@upthink.ee. Отдельного ящика по безопасности пока нет.

Где хранятся данные и кто ещё их обрабатывает

Всё, что делает ученик, хранится в собственной базе Postgres этой установки. Никто из перечисленных ниже не получает ни колоду, ни историю повторений, ни экзаменационную работу. Список читается из настроек этой установки, поэтому это перечень сервисов, к которым обращается эта копия.

  • Groq: то, что вы пишете Ану, и любая сфотографированная вами страница. Зарегистрирован за пределами Европейской экономической зоны.
  • Google Gemini: то, что вы пишете Ану, и любая сфотографированная вами страница. Зарегистрирован за пределами Европейской экономической зоны.
  • Anthropic: то, что вы пишете Ану, и любая сфотографированная вами страница. Зарегистрирован за пределами Европейской экономической зоны.
  • Ekilex в Институте эстонского языка: одно слово, которое вы искали, без привязки к аккаунту. Зарегистрирован в Европейской экономической зоне.
  • Фонд Викимедиа, который ведёт Викисловарь: то же слово, с запросом его значения на английском, или английское слово, которое вы искали, с запросом его эстонского, без привязки к аккаунту. Зарегистрирован за пределами Европейской экономической зоны.
  • Resend, который отправляет наши письма: ваш адрес электронной почты и то, что в письме сказано о вашем собственном курсе. Зарегистрирован за пределами Европейской экономической зоны.
  • Службы push-уведомлений Google, Mozilla, Apple и Microsoft: напоминание, которое вы попросили получать на компьютере, зашифрованное так, что прочитать его может только этот браузер. Зарегистрирован за пределами Европейской экономической зоны.
  • TartuNLP в Тартуском университете: фраза, которую вы попросили прочитать вслух, без привязки к аккаунту. Зарегистрирован в Европейской экономической зоне.
  • Supabase: ваш адрес электронной почты и всё содержимое базы данных, поскольку и то и другое размещено у него. Где он находится, зависит от того, как настроена установка, поэтому спросите у оператора, указанного выше.
  • Vercel, где работают серверы этого приложения: каждый ваш запрос, пока на него отвечают, и журнал запросов, в котором есть ваш IP-адрес. Зарегистрирован за пределами Европейской экономической зоны.

Часть этого покидает Европейскую экономическую зону, и это важно для оценки передачи данных. Передача основана на стандартных договорных условиях, которые публикует каждый поставщик. Данные передают две функции, репетитор и сканер страниц, а в установке без поставщика ИИ нет ни той, ни другой, поэтому организация, которая не может принять такую передачу, может пользоваться остальным приложением без неё.

Нет ни поставщика аналитики, ни рекламного идентификатора, ни стороннего трекера: в приложении нигде нет стороннего тега script, а единственное, что оно считает, возвращаются ли люди, вычисляется из его собственного журнала повторений. Страница «Конфиденциальность» рассказывает обо всём этом подробно и написана для ученика, а не для покупателя.

Как ученик забирает свои данные и как их удаляет

Экспорт. В настройках есть кнопка, которая выдаёт всё, что хранится об аккаунте, одним файлом JSON: каждую карточку, повторение, задание, настройку, отсканированный список слов, проверку уровня, пробный экзамен с сочинением, сообщение репетитору, разговор, предложение, отмеченное слово и членство в группе. Тот же файл восстанавливается в новой установке.

Удаление всего. На том же экране аккаунт удаляется со всем содержимым, включая запись для входа, одним действием и без письменного запроса. Если установка не настроена удалять запись для входа сама, кнопка прямо об этом говорит, а не сообщает об успехе, которого не было. Обе кнопки находятся в разделе «Настройки».

Ученик в группе или рабочей группе может из неё выйти: тогда спонсор перестаёт что-либо видеть, а из колоды ученика ничего не пропадает.

То, что учитель видит о группе, показано на выдуманной группе на странице для преподавателей.

Организация, которая решает, пробовать ли приложение с группой, может прочитать что такое пилотный проект (на английском), в том числе о том, к чему оно ещё не готово.

Всё, что проект утверждает о себе, собрано на странице как мы это знаем (на английском): каждая цифра, день, когда её измерили, и команда, которая измерит её снова.

К какой части государственного экзамена готовит каждый раздел курса и где курсу пока нечего предложить, сказано на странице что охватывает курс (на английском).

Состояние безопасности

Работа над безопасностью описана полностью, а не пересказана для вас вкратце. Есть три документа, и в каждом названы файлы, которые можно открыть:

  • Обзор безопасности и модель угроз: что представляет собой система, пять границ доверия, пятнадцать угроз, разобранных по одной, перечень мер защиты и раздел о том, что не сделано.
  • Реагирование на инциденты: уровни серьёзности, кто что делает, срок по статье 33 GDPR для уведомления надзорного органа, срок по статье 34 GDPR для уведомления затронутых людей и пошаговые инструкции на случай утечки учётных данных, неконтролируемого счёта за ИИ, восстановления базы данных и испорченного словаря.
  • Карта мер защиты: меры защиты, о которых обычно спрашивают проверяющие, с указанием, где реализована каждая.

Все три документа на английском.

Чего у этого проекта нет, прямо. Нет отчёта SOC 2. Нет сертификата ISO/IEC 27001. Карта мер защиты составлена как самооценка теми же людьми, что писали код, и никто вне проекта её не проверял. Внешний тест на проникновение не заказывался, так что никто не атаковал это приложение по договору, и ни один независимый специалист не читал исходный код в поисках уязвимостей. То, что код открыт, не означает, что он прошёл аудит.

Ещё четыре ограничения. Принадлежность строк обеспечивается кодом приложения и проверяется при сборке, а не механизмом защиты на уровне строк в Postgres. Политика безопасности контента (CSP) разрешает ‘unsafe-inline’ в источниках скриптов, по причине, описанной в коде, и это самое слабое её место. Журналы никто не отслеживает постоянно: нет обнаружения вторжений и нет оповещений, кроме необязательного вебхука для ошибок. И многофакторная аутентификация берётся из того, что включено в аккаунте Google ученика, а не требуется здесь.

Вместо этого есть сборка, которая падает при нарушении правила: проверка учётных данных ищет в собранном клиентском коде каждое значение, предназначенное только для сервера, набор инвариантов проверяет правила, которые проект сам себе установил, а браузерные тесты гоняют настоящее приложение. Всё это запускается при каждом изменении.

Один из этих наборов задаёт эти вопросы работающему серверу, а не исходному коду. Он отправляет поддельные запросы, читает каждый заголовок безопасности, проверяет, что закрытое токеном остаётся закрытым, и смотрит, что готова сообщить точка проверки состояния. При первом же запуске он обнаружил, что запрос с адресом, который приложение не могло разобрать, обрабатывался как запрос без адреса. Его написали те же люди, что писали код, поэтому он не может подтвердить, что устройство системы верно, и это не та внешняя проверка, которой, как сказано в этом разделе, не хватает.

Доступность сервиса

Договорного уровня обслуживания сейчас нет. Ни в приложении, ни в его условиях не обещан никакой процент времени работы. Ниже описано, что приложение делает, когда что-то ломается.

Повторение переживает потерю сети. Оценка, данная без связи, попадает в очередь в браузере и отправляется позже со временем, когда ответ был дан на самом деле, никогда не теряется и не получает новое время, так что занятие в поезде ничего не стоит. Сервис-воркер хранит страницы, на которых ученик был последним, и экран для работы без сети за ними, так что приложение открывается, а не показывает ошибку браузера. Словарю, репетитору и озвучке нужна связь, и они говорят об этом, а не показывают устаревшее.

Когда база данных недоступна, страницы, которым она нужна, показывают экран ошибки, где сказано, что ничего не потеряно, и это правда: в журнал повторений только добавляют записи. Само сообщение остаётся на сервере, потому что ошибка базы данных может содержать строку подключения, а на экране видно только номер, который можно нам назвать.

Когда у поставщика ИИ неудачная минута, приложение переходит к следующему настроенному поставщику, а не падает, а если не отвечает никто, функция так и говорит. Ничто из того, что учит эстонскому, не зависит от модели: словарь, колода, расписание, экзамен и каждый тренировочный раунд работают вообще без поставщика ИИ.

Проверка состояния. /api/health отвечает без входа в аккаунт и сообщает, работает ли приложение, отвечает ли база данных и из какого коммита собрана эта версия. В ответе нет ни подсчётов, ни сведений о ком-либо. Его можно опрашивать системой мониторинга.

Как сообщить об уязвимости

Отправьте его privacy@upthink.ee со словом «security» в теме письма. Полная политика в SECURITY.md, включая сроки ответа, которые мы действительно можем выдержать: три рабочих дня на подтверждение получения, десять, чтобы сказать, согласны ли мы, что это проблема, и ориентир в тридцать дней на исправление всего критического или серьёзного. Если сообщение настолько чувствительное, что обычная почта вас беспокоит, напишите об этом одной строкой без подробностей, и мы организуем другой канал.

Если утечка когда-либо затронет персональные данные, мы действуем по описанному выше документу об инцидентах, а надзорный орган Эстонии: Инспекция по защите данных Эстонии (Andmekaitse Inspektsioon).

Доступность

Контрастность измеряется в браузере в обеих темах, каждый элемент управления проверяется на размер 44px при сенсорном вводе, axe проходит по каждой странице при каждом изменении, а аудит с участием человека с инвалидностью, пользующегося вспомогательными технологиями, пока не заказывался. В заявлении о доступности сказано, что заявлено, что проверено и какие пробелы известны.

Конфиденциальность, Условия, Финансирование, Доверие, Для преподавателей, Пилотный проект (на английском), Доступность, Государственный экзамен, Помощь, Войти, Контакты