Geans

Как убедиться, что ваш файл остаётся у вас

Здесь описано, что происходит с файлом ДНК-теста во время анализа, и как проверить это самостоятельно, не полагаясь на наши слова. Понадобится компьютер и 5–10 минут.

Что происходит с файлом

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

С сервера браузер только скачивает: программу анализа (движок), ключ сеанса и «срез базы знаний» — ту часть базы, которая нужна для вашей модели чипа. Для этого он отправляет серверу только служебные запросы: решение небольшой задачи (проверка, что запрос делает браузер, а не программа массового скачивания), номер сеанса в cookie и название модели чипа (например, «23andMe v5»), а также обычные заголовки, которые передаёт любой браузер. Ещё браузер отправляет три служебных запроса о завершении шагов анализа — какой шаг закончился и чем («ok» или вид ошибки), без данных файла. Срез одинаков для всех, у кого такой же чип, и сам по себе ничего не говорит о вас.

Сервис рассчитан на работу с интернетом: ключ сеанса выдаётся на каждый анализ и действует 30 минут. Автономной (офлайн) версии нет.

Схема: куда идёт файл и что приходит с сервера Сверху — сервер Geans, он только отдаёт данные. Ниже — ваше устройство: файл ДНК-теста читается браузером, браузер разбирает файл, считает отчёт и показывает его на экране; отчёт можно сохранить в HTML или PDF. Стрелка от браузера к серверу: служебные запросы — проверка браузера (задача и её решение), номер сеанса в cookie, название модели чипа, сигналы о шагах анализа (шаг и код результата) и обычные заголовки браузера. Стрелка от сервера к браузеру: движок анализа, срез базы знаний под ваш чип, ключ сеанса. Файл и отчёт на сервер не отправляются — ни целиком, ни частями. Сервер Geans только отдаёт данные к серверу: проверка браузера, номер сеанса (cookie), название модели чипа, сигналы шагов с сервера: движок, срез базы, ключ сеанса Браузер (эта вкладка) разбирает файл, считает отчёт Ваш файл ДНК-теста Отчёт экран, HTML, PDF Файл и отчёт на сервер не отправляются ни целиком, ни частями Ваше устройство
Рисунок 1. Файл обрабатывается на вашем устройстве. К серверу уходят только служебные запросы (проверка браузера, номер сеанса, сигналы шагов) и название модели чипа; обратно приходят движок, срез базы и ключ сеанса.

Как проверить: все запросы страницы во вкладке «Сеть»

В каждом настольном браузере есть инструменты разработчика. Их вкладка «Сеть» (Network) показывает каждый запрос, который страница отправляет в интернет: куда, каким методом и сколько данных. Если бы файл уходил на сервер, в списке был бы запрос с методом POST или PUT и телом размером с ваш файл (обычно 5–30 МБ) — или, если данные прятать в адрес, много запросов с длинными непонятными адресами.

Важно: откройте вкладку «Сеть» до того, как выберете файл, — браузер записывает запросы только пока панель открыта. Если открыли позже, обновите страницу при открытой панели и начните заново.

Chrome, Edge, Яндекс Браузер, Opera

  1. Откройте страницу анализа Geans.
  2. Откройте инструменты разработчика: клавиша F12 или Ctrl+Shift+I (на Mac — ⌘+⌥+I). Через меню Chrome: ⋮ → «Дополнительные инструменты» → «Инструменты разработчика»; в других браузерах этой группы пункты меню называются иначе, но клавиши те же.
  3. Выберите вкладку «Сеть» (Network).
  4. Если нет колонки «Метод» (Method): щёлкните правой кнопкой по заголовку таблицы и отметьте её.
  5. Выберите файл, нажмите «Начать анализ» и дождитесь отчёта.
  6. Просмотрите список (рисунок 2). Затем введите в поле «Фильтр» (Filter) текст method:POST — список должен стать пустым (рисунок 3). То же можно проверить для method:PUT.

Firefox

  1. Откройте страницу анализа Geans.
  2. Нажмите Ctrl+Shift+E (на Mac — ⌘+⌥+E): сразу откроется вкладка «Сеть». Или F12 и затем вкладка «Сеть».
  3. Колонка «Метод» показана по умолчанию. «Передано» — сколько пришло по сети, «Размер» — объём ответа.
  4. Выберите файл, нажмите «Начать анализ» и дождитесь отчёта.
  5. Просмотрите список. В поле «Фильтр URL» введите method:POST — список должен стать пустым.

Safari (Mac)

  1. Включите инструменты разработчика один раз: Safari → «Настройки» → «Дополнения» → отметьте «Показывать функции для веб-разработчиков» (в старых версиях — «Показывать меню „Разработка“ в строке меню»).
  2. Откройте страницу анализа Geans, затем «Разработка» → «Показать веб-инспектор» (⌘+⌥+I) и вкладку «Сеть».
  3. Если нет колонки «Метод»: щёлкните правой кнопкой по заголовку таблицы и включите её.
  4. Выберите файл, нажмите «Начать анализ» и дождитесь отчёта.
  5. Отсортируйте список по колонке «Метод» (щелчок по заголовку): во всех строках должно быть GET.

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

Что вы увидите

Все запросы — методом GET, то есть браузер только получает данные. Крупные размеры в списке — это то, что скачивается к вам, а не то, что отправляется.

Запросы страницы анализа (размеры приблизительные)
Что этоИмя в спискеКогдаСколько скачивается к вам
Сама страница и её оформлениеадрес сайта, style.css, app.js, md.js, report_css.jsпри открытиидесятки КБ
Значок сайта (браузер запрашивает его сам)favicon.icoпри открытиипочти ничего
Движок анализаworker.js, пять файлов pyodide…, core.zipпосле выбора файлаоколо 14 МБ при первом заходе. При повторном файлы pyodide… берутся из кэша браузера без запроса к серверу (в колонке «Размер» — «кэш», в Chrome — «(disk cache)»), а worker.js и core.zip сервер подтверждает ответом 304 «не изменилось» почти без данных
Проверка браузера (задача на вычисление)pow.js, challengeпосле «Начать анализ»несколько КБ
Ключ сеансаsession?c=…&n=…после проверки файла в браузеременьше 1 КБ; в ответе сервер ставит cookie geans_s — номер сеанса на 30 минут
Оглавление базы знанийmanifest.jsonсразу после ключа (с cookie сеанса)около 1 МБ
Срез базы знаний под ваш чип<модель чипа>.<код>.bin, например 23andme_v5.….binпосле определения модели чипа (с cookie сеанса)2–11 МБ
Иногда — полный срезunknown.….binесли чип не распознан или в файле есть маркеры (позиции в ДНК, которые проверяет чип) вне типового набора чипаоколо 11 МБ
Служебный запрос о завершении шага анализа: два параметра — шаг и код результата; данных файла нетping?step=…&code=…после проверки файла, после анализа и после показа отчёта (или на шаге, где случилась ошибка)ничего: ответ 204 без содержимого; cookie не прикладывается

В адресе запроса ключа (session?c=…&n=…) два параметра: c — задача, которую выдал сервер, n — число, которое подобрал ваш браузер, решая её. Данных из файла там нет; это можно увидеть, открыв запрос (вкладки «Заголовки» / «Полезная нагрузка», Headers / Payload).

У служебного запроса ping?step=…&code=… тоже два параметра: step — шаг (loaded — файл проверен, analyzed — анализ закончен, report — отчёт показан) и code — итог шага: ok или короткое название ошибки, например e_net («нет связи»). Других значений сервер не принимает. Если запрос не дошёл, на анализ это не влияет.

В заголовках запросов manifest.json и среза видна cookie geans_s — это номер сеанса, о нём ниже, в разделе «Что сервер всё-таки узнаёт».

Схема вкладки «Сеть» после анализа Таблица запросов с колонками Имя, Метод, Статус, Тип, Размер. Во всех строках метод GET; колонка Метод подсвечена (метка 1). Строки: страница, style.css, app.js, worker.js, файлы движка pyodide (около 14 МБ), core.zip, challenge, session, manifest.json (около 0,9 МБ) и срез базы 23andme_v5 (3,3 МБ), последняя строка подсвечена (метка 2): это скачивание к вам, а не отправка. Элементы Консоль Сеть Источники Фильтр ИмяМетодСтатус ТипРазмер / (страница)GET200document4 КБ style.cssGET200stylesheet7 КБ app.jsGET200script29 КБ worker.jsGET200script4 КБ pyodide… (5 файлов)GET200script, wasm≈14 МБ core.zipGET200fetch≈0,2 МБ challengeGET200fetch<1 КБ session?c=…&n=…GET200fetch<1 КБ manifest.jsonGET200fetch≈0,9 МБ 23andme_v5.….binGET200fetch3,3 МБ Все запросы — получение данных (GET); часть строк для краткости опущена 1 2 1 Метод: везде GET (получение данных). Отправка файла была бы POST или PUT. 2 Срез базы под ваш чип (2–11 МБ) скачивается к вам — это не отправка.
Рисунок 2. Как выглядит список запросов после анализа. Это схема, а не снимок экрана: вид вкладки зависит от браузера и его версии; размеры приблизительные.
Схема: фильтр method:POST даёт пустой список В поле фильтра вкладки «Сеть» введено method:POST, поле подсвечено. Таблица запросов пуста: ни одного запроса, отправляющего данные. Так и должно быть. Элементы Консоль Сеть Источники method:POST ИмяМетодСтатус ТипРазмер Список пуст ✓ Ни одного запроса, отправляющего данные, — так и должно быть
Рисунок 3. Фильтр method:POST (Chrome, Edge, Firefox) показывает только запросы, отправляющие данные. После анализа в Geans список пуст. Это схема, а не снимок экрана.

Чего быть не должно

Если вы увидите что-то из этого — пожалуйста, сообщите нам: это ошибка, и мы хотим о ней знать. Для этого есть форма обратной связи.

Дополнительно: запрет на связь с другими сайтами

Вместе со страницей сервер передаёт браузеру правило безопасности (заголовок Content-Security-Policy). Оно запрещает странице загружать что-либо и соединяться с любыми сайтами, кроме сайта Geans (connect-src 'self'), и отправлять формы (form-action 'none'). Исключение — страница формы обратной связи: ей разрешено отправить форму только на сайт Geans (form-action 'self'). Это правило выполняет сам браузер. Увидеть его можно во вкладке «Сеть»: щёлкните по первой строке (сама страница) → «Заголовки» (Headers) → «Заголовки ответа» (Response Headers).

Вкладка «Сеть» показывает запросы этой страницы. Расширения браузера работают отдельно от неё и этой проверкой не охватываются; если сомневаетесь в расширениях, откройте страницу в окне без них (например, в гостевом профиле).

Что сервер всё-таки узнаёт

Содержимого файла, генотипов, имени файла и отчёта сервер не получает. По самим запросам он видит немного:

Что попадает в журналы

Независимая проверка

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

Техническое задание аудита опубликовано: что именно проверит аудитор — какие обещания, какими способами и как он убедится, что на сервере работает та же программа, которую он проверял.

Аудит ещё не проведён.