Перейти к содержимому

Право

Что сайт кладёт вам в браузер

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

Весь список, пять записей

Одна куки, три ключа в местном хранилище и один ключ, живущий не дольше вкладки. Это всё.

Каждая названа тем именем, которое вы увидите в средствах разработчика своего браузера, чтобы список можно было сверить, а не принять на веру.

  • NEXT_LOCALE, куки

    Держит код языка и больше ничего. Пишется только когда вы выбрали язык в меню, и живёт год.

  • armanos-theme, местное хранилище

    Держит слово dark или слово light. Пишется только когда вы нажали кнопку темы.

  • armanos_access_token, местное хранилище

    Короткоживущий ключ, подтверждающий вход. Пишется при входе, снимается при выходе.

  • armanos_refresh_token, местное хранилище

    Ключ, которым у сервера просят свежий ключ доступа. Пишется при входе, снимается при выходе.

  • armanos.fromApp, хранилище вкладки

    Держит единицу, если вы пришли сюда из программы. Пропадает вместе с закрытой вкладкой.

Ключи входа и риск в них

Оба ключа входа лежат в местном хранилище, а его читает любой сценарий, работающий на странице. Куки с пометкой http-only сценарию недоступна; эти два ключа доступны, и это настоящая разница, а не мелочь.

Между ними и чужим сценарием стоит то, что чужих сценариев здесь не работает. Правило ответа, названное в доказательстве, пускает сценарии только с нашего же адреса, поэтому чужой браузер отвергнет, даже окажись он на странице.

Выход снимает оба

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

До вашего действия не пишется ничего

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

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

Куки языка

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

У неё стоит пометка lax, поэтому чужой сайт не заставит ваш браузер отправить её незаметно. От сценариев она не закрыта, потому что код языка не тайна, и опознавателем вас или вашей учётной записи она не является.

Ключ темы и ключ вкладки

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

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

Ни счётчиков, ни чужих сценариев

Счётчиков на этом сайте нет. Ни диспетчера меток, ни записи сеанса, ни сборщика падений, ни рекламного пикселя, ни кнопки соцсети, звонящей домой.

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

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

Как проверить эту страницу самому

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

Вторую половину показывает раздел сети. Перезагрузите страницу с открытым разделом, и в каждой строке будет наш собственный адрес.

Чего эта страница не разбирает

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

Где это решается

Каждая строка это файл, который можно открыть.

Куки языка: где пишется и где читается
apps/web/components/site/LanguageSwitcher.tsx · apps/web/middleware.ts
Два ключа входа: пишутся при входе, снимаются при выходе
apps/web/lib/auth.ts
Ключ темы и сценарий, читающий его до отрисовки
apps/web/components/site/ThemeToggle.tsx · apps/web/app/not-found.tsx
Ключ вкладки: ставится при приходе из программы и нужен один раз
apps/web/components/auth/AuthForm.tsx · apps/web/components/dashboard/OpenInAppBanner.tsx
Правило, пускающее сценарии и стили только с нашего адреса
apps/web/next.config.js
Выданный ключ доступа не кладётся в браузер, проверено прогоном
apps/web/test/api-keys-web.js

Вопросы

Почему нет полосы про куки?
Куки здесь одна, в ней код языка, и пишется она только после того, как вы сами выбрали язык. Никто на этом сайте вас не считает, не ведёт между сайтами и никому ничего не передаёт.
Можно ходить по сайту с закрытым хранилищем?
Читать можно. Каждая запись обёрнута так, что отказ проглатывается, а не летит вам в лицо; язык тогда идёт за настройками браузера, а тема за настройками системы. Вход не удержится, потому что ключу негде лежать.
Мой вход хранится в куки?
Нет. Оба ключа лежат в местном хранилище и едут на наш сервер заголовком запроса. Ни одна наша куки на сервер не уходит вообще.
Что происходит с пятью записями при выходе?
Оба ключа входа снимаются сразу. Куки языка и ключ темы остаются, потому что к вашей учётной записи они отношения не имеют.
Как получено число чужих обращений?
Обходом всех собранных страниц и чтением каждого признака, за которым браузер идёт сам, а не взглядом на пару страниц. Вышел ноль, и держит этот ноль правило ответа из доказательства.

Нашли то, чего мы не перечислили?

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