Как убедиться, что ваш файл остаётся у вас
Здесь описано, что происходит с файлом ДНК-теста во время анализа, и как проверить это самостоятельно, не полагаясь на наши слова. Понадобится компьютер и 5–10 минут.
Что происходит с файлом
Файл, который вы выбираете, читает ваш браузер — на вашем компьютере или телефоне. Разбор файла, сверка с базой знаний и подготовка отчёта идут внутри открытой вкладки. Ни файл, ни его части, ни имя файла, ни готовый отчёт на сервер не отправляются. Отчёт существует только на вашем экране, пока вы его не сохраните к себе.
С сервера браузер только скачивает: программу анализа (движок), ключ сеанса и «срез базы знаний» — ту часть базы, которая нужна для вашей модели чипа. Для этого он отправляет серверу только служебные запросы: решение небольшой задачи (проверка, что запрос делает браузер, а не программа массового скачивания), номер сеанса в cookie и название модели чипа (например, «23andMe v5»), а также обычные заголовки, которые передаёт любой браузер. Ещё браузер отправляет три служебных запроса о завершении шагов анализа — какой шаг закончился и чем («ok» или вид ошибки), без данных файла. Срез одинаков для всех, у кого такой же чип, и сам по себе ничего не говорит о вас.
Сервис рассчитан на работу с интернетом: ключ сеанса выдаётся на каждый анализ и действует 30 минут. Автономной (офлайн) версии нет.
Как проверить: все запросы страницы во вкладке «Сеть»
В каждом настольном браузере есть инструменты разработчика. Их вкладка «Сеть» (Network) показывает каждый запрос,
который страница отправляет в интернет: куда, каким методом и сколько данных. Если бы файл уходил на сервер, в списке
был бы запрос с методом POST или PUT и телом размером с ваш файл (обычно 5–30 МБ) — или,
если данные прятать в адрес, много запросов с длинными непонятными адресами.
Важно: откройте вкладку «Сеть» до того, как выберете файл, — браузер записывает запросы только пока панель открыта. Если открыли позже, обновите страницу при открытой панели и начните заново.
Chrome, Edge, Яндекс Браузер, Opera
- Откройте страницу анализа Geans.
- Откройте инструменты разработчика: клавиша F12 или Ctrl+Shift+I (на Mac — ⌘+⌥+I). Через меню Chrome: ⋮ → «Дополнительные инструменты» → «Инструменты разработчика»; в других браузерах этой группы пункты меню называются иначе, но клавиши те же.
- Выберите вкладку «Сеть» (Network).
- Если нет колонки «Метод» (Method): щёлкните правой кнопкой по заголовку таблицы и отметьте её.
- Выберите файл, нажмите «Начать анализ» и дождитесь отчёта.
- Просмотрите список (рисунок 2). Затем введите в поле «Фильтр» (Filter) текст
method:POST— список должен стать пустым (рисунок 3). То же можно проверить дляmethod:PUT.
Firefox
- Откройте страницу анализа Geans.
- Нажмите Ctrl+Shift+E (на Mac — ⌘+⌥+E): сразу откроется вкладка «Сеть». Или F12 и затем вкладка «Сеть».
- Колонка «Метод» показана по умолчанию. «Передано» — сколько пришло по сети, «Размер» — объём ответа.
- Выберите файл, нажмите «Начать анализ» и дождитесь отчёта.
- Просмотрите список. В поле «Фильтр URL» введите
method:POST— список должен стать пустым.
Safari (Mac)
- Включите инструменты разработчика один раз: Safari → «Настройки» → «Дополнения» → отметьте «Показывать функции для веб-разработчиков» (в старых версиях — «Показывать меню „Разработка“ в строке меню»).
- Откройте страницу анализа Geans, затем «Разработка» → «Показать веб-инспектор» (⌘+⌥+I) и вкладку «Сеть».
- Если нет колонки «Метод»: щёлкните правой кнопкой по заголовку таблицы и включите её.
- Выберите файл, нажмите «Начать анализ» и дождитесь отчёта.
- Отсортируйте список по колонке «Метод» (щелчок по заголовку): во всех строках должно быть
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 — это номер сеанса, о нём
ниже, в разделе «Что сервер всё-таки узнаёт».
method:POST (Chrome, Edge, Firefox) показывает только запросы, отправляющие данные.
После анализа в Geans список пуст. Это схема, а не снимок экрана.Чего быть не должно
- запросов с методом
POST,PUTилиPATCHна странице анализа. ЕдинственныйPOSTна сайте — отправка формы обратной связи с её отдельной страницы, и только когда вы сами нажимаете «Отправить»; его тело — только то, что вы ввели в форму (размер — как у введённого текста, не больше 24 КБ); - запросов, у которых в разделе «Полезная нагрузка» (Payload) или «Запрос» (Request) есть содержимое вашего файла;
- запросов с длинными непонятными адресами, особенно многих подряд: данные можно передать и в адресе. Параметры
в адресе есть только у двух запросов Geans —
session?c=…&n=…иping?step=…&code=…(см. выше); - запросов к другим сайтам: в колонке «Домен» (Domain) везде должен быть адрес сайта Geans. В Firefox эта колонка видна сразу, в Chrome и Safari её включают так же, как «Метод».
Если вы увидите что-то из этого — пожалуйста, сообщите нам: это ошибка, и мы хотим о ней знать. Для этого есть форма обратной связи.
Дополнительно: запрет на связь с другими сайтами
Вместе со страницей сервер передаёт браузеру правило безопасности (заголовок Content-Security-Policy).
Оно запрещает странице загружать что-либо и соединяться с любыми сайтами, кроме сайта Geans
(connect-src 'self'), и отправлять формы (form-action 'none'). Исключение — страница формы
обратной связи: ей разрешено отправить форму только на сайт Geans (form-action 'self'). Это правило
выполняет сам браузер.
Увидеть его можно во вкладке «Сеть»: щёлкните по первой строке (сама страница) → «Заголовки» (Headers) → «Заголовки
ответа» (Response Headers).
Вкладка «Сеть» показывает запросы этой страницы. Расширения браузера работают отдельно от неё и этой проверкой не охватываются; если сомневаетесь в расширениях, откройте страницу в окне без них (например, в гостевом профиле).
Что сервер всё-таки узнаёт
Содержимого файла, генотипов, имени файла и отчёта сервер не получает. По самим запросам он видит немного:
- Адрес подключения (IP) и время запросов — как любой сайт. Программа сервера Geans держит адрес в памяти только для ограничения числа анализов (не больше 3 в час с одного адреса) и в свой журнал его не записывает.
- Номер сеанса (cookie
geans_s). Сервер выдаёт его вместе с ключом, браузер прикладывает его к запросам оглавления и среза базы. Это случайное число со сроком действия, подписанное сервером: по нему срез получает только тот, кто прошёл проверку браузера. Cookie живёт 30 минут, недоступна скриптам страницы (HttpOnly) и ничего о вас не содержит. - Модель чипа — по имени скачанного среза. Она одинакова у всех владельцев такого чипа.
- Понадобился ли полный срез. Если после среза модели скачан второй, полный срез, сервер знает, что в файле есть хотя бы один маркер (позиция в ДНК) вне типового набора чипа — какой именно, неизвестно. Если полный срез скачан сразу, значит, модель чипа не распознана или файл в сборке генома GRCh38 (более новой системе координат ДНК, в которой выдают файлы некоторые сервисы).
- Сколько длились шаги на вашем устройстве — по промежуткам между запросами (задача → ключ → срез → второй срез). Они зависят в основном от скорости устройства и решения задачи проверки, отчасти — от размера файла; содержание файла по ним не восстановить.
- Чем закончились шаги анализа — по запросам
ping: проверен ли файл, закончен ли анализ, показан ли отчёт, а если нет — вид ошибки. - Обычные сведения, которые передаёт любой браузер — тип и версия браузера, язык.
- Сообщение формы обратной связи — только если вы его отправили: текст и контакт, который вы указали. Сохраняются вместе с датой отправки, без адреса.
Что попадает в журналы
- Программа сервера Geans записывает в журнал время, метод, путь запроса без параметров и код ответа. Путь скачанного среза содержит модель чипа, поэтому в журнале видно, какие срезы скачивались (в том числе второй, полный), — без адреса и без cookie.
- Веб-сервер перед ней (nginx) настраивается по контрольному списку развёртывания: журнал запросов — без адреса, типа браузера и страницы, с которой пришли. Адрес может попасть в журнал ошибок веб-сервера при сбоях соединения: формат этого журнала не настраивается.
- Журналы хостинга, защиты от сетевых атак и интернет-провайдеров — вне нашего контроля.
Независимая проверка
Независимый аудит запланирован: внешний специалист проверит, что файл не передаётся, страница не обращается к другим сайтам, а сервер не хранит лишнего. Когда аудит будет проведён, здесь появится ссылка на его отчёт.
Техническое задание аудита опубликовано: что именно проверит аудитор — какие обещания, какими способами и как он убедится, что на сервере работает та же программа, которую он проверял.
Аудит ещё не проведён.