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