Как мы сделали чтение писем безопаснее: Content Security Policy в Яндекс.Почте
Одним из приоритетов для команды Яндекс.Почты всегда была и есть безопасность данных пользователя. Причем это касается не только хранения писем, но и безопасного доступа к ним. Еще в 2011 году мы стали пропускать все изображения в письмах через наши прокси-сервера, перекрыв один из каналов распространения вредоносного кода, а также кешировать их для экономии трафика и обеспечения большей приватности. В ноябре этого года мы внедрили шифрование при приеме и отправке почты, а также и перевели почту в режим HTTPS-only — теперь веб-интерфейс доступен только по безопасному протоколу.
А с недавних пор мы стали поддерживать новый механизм защиты данных пользователя – стандарт Content Security Policy. С его помощью можно запретить скриптам на странице подгружать какие-либо ресурсы с хостов, не указанных в белом списке.
Это пока довольно редкая штука (ни одна крупная известная нам почта этого ещё не применяет), и в этом посте мы поделимся опытом внедрения стандарта.
Content Security Policy (CSP) — новый стандарт, определяющий HTTP-заголовки Content-Security-Policy и Content-Security-Policy-Report-Only, которые сообщают браузеру белый список хостов, с которых он может загружать различные ресурсы.
Текущий статус стандарта — Candidate Recommendation.
Из чего состоит CSP?
Некоторые браузеры также указывают в отчете ссылку и строку JS, которые привели к нарушению политики безопасности.
Если указан заголовок Content-Security-Policy, то браузер блокирует все ресурсы, которые не соответствуют политике. Заголовок Content-Security-Policy-Report-Only также проверяет все ресурсы, но не блокирует их, а только сообщает о нарушениях. Мы рекомендуем его использовать на первых этапах внедрения CSP.
Как мы внедряли
Мы исследовали эту технологию с весны, когда еще не было ни одной стандартной реализации. Сначала аккуратно внедрили заголовок Content-Security-Policy-Report-Only для нашей внутренней почты. Некоторые время мы изучали отчеты и исправляли нашу политику, и уже в мае включили CSP в блокирующем режиме. Во время внутреннего тестирования исследовалось поведение всех заголовков — и стандартных, и нет.
С публичной почтой было несколько труднее, ведь к нам приходили пользователи с неконтролируемым окружением. Несколько месяцев мы разбирались в отчетах, исправляли политики, и, наконец, осенью выкатили их на 100% в блокирующем режиме.
Самое интересное, что мы теперь имеем — несколько миллионов ежедневных отчетов с нарушениями от вирусов, нерадивых плагинов и расширений, которые пытаются вставлять свой код на наши страницы. Мы не можем контролировать содержимое этого кода, а значит не можем гарантировать, что он бережно относится к персональным данным наших пользователей — и довольны тем, что блокируем их исполнение.
Разберем заголовок на примере мобильной Яндекс.Почты
Что нужно учитывать при внедрении
Фишинговая атака на пользователей «Яндекса»: хакеры уводят почту и крадут деньги
Пользователей почтового сервиса «Яндекса» атаковали хакеры, которые отправляют письма от имени «Яндекса» и Google. В первом случае — в попытке угнать почтовый аккаунт, а во втором — ещё и завладеть деньгами.
От фейкового «Яндекса» пользователю приходит оповещение о том, что кто-то авторизовался с его учётными данными. Ему предлагается перейти на специальную страницу, где отображается форма для смены пароля.
В сообщении предлагается перейти на страницу службы поддержки, если это был не владелец аккаунта. Но на указанной странице отображается форма смены пароля. Адрес отправителя в письме подделан, из-за чего пользователь должен подумать, что письмо пришло на самом деле от «Яндекса». Этот адрес может быть помечен значком «Отправитель подтверждён и проверен», поэтому даже опытный пользователь может попасться на такую уловку и перейти по ссылке.
Сайт мошенников расположен по адресу yandex-passport.run, что похоже на реальный адрес «Яндекса» passport.yandex.ru. Фейковая страница выполнена в том же дизайне, что и оригинальный сайт, а как только пользователь укажет свой пароль, эти данные уйдут к мошенникам, которые смогут завладеть его аккаунтом. Сменить пароль на поддельном сайте, конечно же, не получится.
Зная пароль от почты, мошенники получают возможность залогиниться в различные сервисы «Яндекса» от имени пользователя, в том числе в «Яндекс.Деньги», где могут храниться денежные средства, и в «Яндекс.Диск», где могут оказаться приватные фотографии и видео.
От имени Google с адреса suite-noreply@google.com пользователям «Яндекса» приходит оповещение о сбросе пароля и рассказывается о возможности получения денежной выплаты после установки нового пароля. Принцип кражи данных точно такой же, как в предыдущем случае — когда пользователь укажет свой пароль, он отправится в мошенническую базу данных.
После перехода по ссылке из письма открывается сайт с акцией «Счастивый E-mail» и предлагается выиграть до 3000 евро. Участвовать в таких акциях опасно: можно лишиться не только почтового аккаунта, но и денег на банковской карте — если выдать мошенникам её номер и секретные данные.
CDN для статики и измерения: как Яндекс.Почта стала быстрее в регионах
Скорость работы веб-интерфейса — очень важная вещь, и мы в Яндексе особенно хорошо понимаем это. От ощущения лёгкости и того, с какой скоростью у пользователя загрузятся важные ему элементы, может зависеть и то, каким сервисом он в итоге будет пользоваться.
Мы в Яндекс.Почте много работаем над ускорением клиентской части. Только на Хабре мы рассказывали о том, как оптимизируем верстку, отказались от XSL и перешли на новый шаблонизатор.
Но добиться увеличения скорости работы можно не только за счет оптимизации фронтенда. Сегодня мы хотим рассказать о переезде статических файлов Яндекс.Почты на специальный CDN Яндекса для статики и о том, как это ускорило её работу, особенно в регионах.
Подробности о том, куда переехали, как устроен новый хостинг, почему он устроен именно так, и как мы измеряли, насколько стало быстрее, — читайте дальше.
Что тормозит загрузку?
Когда человек заходит в почту, первое, что у него загружается, — минимальный HTML и так называемый bootstrap (загрузчик). Он отвечает за асинхронную загрузку всех необходимых JavaScript-модулей, шаблонов и CSS-файлов для отрисовки интерфейса, а также за первоначальную подгрузку данных. В Яндекс.Почте HTML загружается с нашего основного домена mail.yandex.ru, а bootstrap — со статического кластера mailstatic.yandex.net.
В него входит около сотни машин, расположенных в нескольких датацентрах Москвы и Подмосковья. Единственная задача этого кластера — отдавать клиенту статические файлы, которые нужны для отображения и работы веб-интерфейса Почты.
Чтобы увидеть проблему скорости в полный рост, нужно задуматься о географии пользователей Яндекс.Почты. Даже если говорить только о России, самой большой стране в мире. Например, если ориентироваться на протяжённость Транссибирской магистрали, расстояние между Москвой и Владивостоком — почти 9300 км. Пакеты с данными пользователей, разумеется, не двигаются по железной дороге — они путешествуют по линиям связи. А скорость передачи данных в оптоволокне примерно в полтора раза ниже скорости света в вакууме. Свою долю задержек вносит и сетевое оборудование на пути следования данных. Таким образом, RTT от наших датацентров в Москве до Владивостока составляет 120-130ms, а, например, до Новосибирска — около 60ms.
Локальные сервера
Для решения проблем со скоростью у Яндекса есть CDN-хостинг — yandex.st. Yandex.st — это несколько кластеров машин, большая часть из которых, как и mailstatic.yandex.net, расположена в московских датацентрах. Но, в отличие от mailstatic.yandex.net, у него есть представительства во многих крупных городах России, ближнего зарубежья и мира.
На данный момент наш CDN-хостинг поддерживает более трехсот провайдеров в 11 регионах. Кстати, yandex.st третий в мире по популярности хостинг библиотеки jquery.
Он работает на технологии anycast. Это значит, что пользователю на запрос файла отвечает топологически ближайший к нему сервер. То есть, если человек находится во Владивостоке, его запрос будет направлен на сервер, расположенный во Владивостоке, а значит он получит ответ быстрее, чем если бы его запрос пошёл в Москву.
Переезд Яндекс.Почты на yandex.st
Прежде чем переехать, нужно было оценить то, насколько эффективен будет переезд и какую пользу он принесёт. Для этого мы обвесили веб-интерфейс Почты датчиками, построили графики и перевезли на yandex.st только 50% пользователей. Это было сделано для того, чтобы можно было сравнить всё с эталоном — mailstatic.
В клиентскую часть веб-интерфейса мы встроили специальный таймер скорости загрузки статики. В этом нам помог Navigation Timing API, которое есть в большинстве современных браузеров. API с точностью до миллисекунд знает, в какой момент пользователь начинает открывать почту, а javascript-платформа — в какой момент загрузились все необходимые статические файлы. Если мы вычтем из второго таймстемпа первый, можем получить время, за которое загружалась вся статика. Полученное число вместе с другими метриками отправляется GET-запросом от пользователя на специальные сервера.
В отличие от таймингов access-логов nginx (для которых, разумеется, у нас тоже есть графики), такая метрика позволяет учитывать время загрузки всей почты, вне зависимости от того, какие файлы и сколько загружает каждый пользователь. Грубо говоря, мы можем точно узнать, за какое время у пользователя грузится вся почта, а не каждый файл по отдельности.
В менее чем одном проценте случаев из-за непонятных причин эти цифры прилетают откровенно неправдоподобными. Например, отрицательными или равными 50 годам.
Для того чтобы отсечь такие значения, мы решили построить график времени, в которое укладывается 75%, 95% и 99% загрузок.
Но и этих цифр недостаточно — скорость загрузки меняется в том числе и из-за изменения размеров файлов и их количества. Для того чтобы понять, насколько в других регионах статика почты стала грузиться быстрее, в качестве KPI переезда мы выбрали сравнение скорости загрузки в каждом регионе со скоростью загрузки в Москве. То есть мы точечно начали отнимать от времени загрузки из региона время загрузки из Москвы. Если значение получалось отрицательным, мы считали, что делаем всё правильно и скорость в этом регионе стала быстрее.
Этот график помог найти несколько узких мест и проблем на региональных машинках, которые мы быстро починили.
Результат
В результате переезда Яндекс.Почта стала отвечать и грузиться быстрее: в зависимости от региона от нескольких сот миллисекунд до секунд. Скорость загрузки статики в Новосибирске и Казани увеличилась в два раза, в Екатеринбурге и в Владивостоке — примерно в полтора.
График среднего времени загрузки статики в некоторых городах
Благодаря настройке региональных серверов, мы нашли несколько возможностей увеличить скорость и в «домашнем» регионе: Яндекс.Почта стала быстрее не только в регионах, но и в Москве, так что предлагаем всем желающим начать использовать yandex.st.
Владельцам сайтов
Если в вашем проекте используется jquery или другие популярные javascript-фреймворки и библиотеки, вы можете подключить их с наших серверов.
Как yabs.yandex.ru ворует ваши конверсии из Директа
Иногда в отчётах по источникам трафика появляется непонятный источник yabs.yandex.ru / referral. Мы как сервис по автоматизации отчётов знаем, насколько важно получать корректные данные в системах аналитики. Поэтому решили разобраться, что это за источник и что делать, если он появился.
Если погуглить что за источник yabs.yandex.ru и откуда он берется в Google Analytics, то первые 10 статей в поисковиках скажут вам, что проблема в ваших utm-метках, и нужно их починить.
“Основные причины появления yabs.yandex.ru — это отсутствие UTM-разметки.
Необходимо проверить, во всех ли URL для контекстной рекламы корректно настроена UTM-разметка…
Второй вариант — это когда разметка сделана правильно, но cms сайта настроена так, что метка в URL при переходе обрезается.”
“yabs.yandex.ru — это технический поддомен Яндекса, в котором реализована переадресация … Чтобы избавится от этих источников можно добавить UTM разметку к вашим ссылкам…
“yabs.yandex.ru / referral — контекстная реклама в яндекс (возможно и медийная), если не настроены или неправильно настроены utm-метки”.
Некоторые даже рекомендуют переименовать с помощью фильтров на стороне Google Analytics этот источник в yandex / cpc, но это лечит только симптом, но не заболевание.
Реальное решение проблемы можно найти в блоге Димы Осиюка, но его очень сложно нагуглить, потому что там он не рассказывает конкретно про yabs.yandex.ru, а говорит в целом про аналитику на SPA-сайтах.
yabs.yandex.ru — отличный индикатор, чтобы найти проблему в настройках аналитики.
Он указывает, что мы имеем следующие проблемы:
Эта проблема затрагивает все рекламные каналы, т.к., например рекламу из Google Ads вам так легко не отловить, потому что у неё нет отдельного технического поддомена, и в данном случае она будет попадать в google / organic, и вы этого даже не заметите
yabs.yandex.ru — это действительно технический поддомен Яндекса. Когда пользователь кликает по рекламе в Директе, то сперва он отправляется именно туда, и уже потом его перенаправляют на нужный сайт. Т.е. это трафик пользователей, которые перешли по рекламе из Директа на сайт.
Но почему у части трафика нормальный источник вроде yandex / cpc, а часть попадает в этот странный yabs.yandex.ru?
Вы можете посмотреть в Google Analytics отчет Основные пути конверсий и увидеть, что yabs.yandex.ru появляется как правило после yandex / cpc. Сеанс изначально начинается в правильном канале, но потом в какой-то момент рвётся, и начинается новый сеанс в yabs.yandex.ru
Всё дело в том как Google Analytics определяет источники трафика у сеансов.
Есть два основных параметра, по которым Google Analytics определяет источник трафика — document.referrer (откуда пришел пользователь) и document.location (где он сейчас — это то, что вы обычно видите в строке браузера).
Когда пользователь переходит по рекламе из Директа на сайт https://site.ru/, то в Google Analytics отправляется просмотр страницы с примерно следующими параметрами:
И на этом этапе в Google Analytics всё хорошо. У пользователя начался сеанс с источником yandex / cpc, число сеансов совпадает с числом кликов.
Но многие современные сайты используют технологии, на которых контент подгружается без полной перезагрузки страницы. И когда пользователь листает каталог, переходит по вкладкам карточки товара и т.д., то в Google Analytics начинают отправляться следующие параметры:
И в этот момент в Google Analytics начинается новый сеанс в источнике yabs.yandex.ru, потому что UTM-меток уже нет, а document.referrer не изменился, потому что страница не перезагрузилась.
В Google Analytics можно попробовать найти — в какой момент у вас рвётся сеанс и начинается новый. Для это достаточно в отчете по Источнику отфильтровать yabs.yandex.ru и добавить дополнительный параметр — страница входа.
На этих страницах или при переходе на эти страницы как раз и происходит описанная выше ситуация. Чаще всего это бывает при бесконечном скролле каталога в интернет-магазине, когда товары динамически подгружаются, и тогда в отчете вы увидите “вторые» страницы каталогов.
На скрине видно, что больше 1000 сеансов началось в корзине, где скорее всего и происходит перетирание источника.
Дальше вы можете пойти на сайт и найти точный момент когда это происходит покопавшись в консоли или рассказать об этом вашему аналитику.
Что означает «Именовать счетчик GA в GTM»?
Нельзя просто в настройках исключить источник перехода yabs.yandex.ru?
Можно, но тогда это починится только для Директа.
Такая же проблема существует во всех остальных рекламных источниках, просто вы её не видите в отчетах, а она есть.
Реклама из Google Ads в итоге продолжит падать в google / organic, поэтому нужно исправлять проблему на стороне настройки кода отслеживания.
я сначала не поняла, но потом тоже не поняла. Как фильтр на уровне ресурса может исправить ситуацию выборочно только для Директа? И при чем тут редирект yabs.yandex.ru в цепочке Google Ads > Analytics?
Если исключить yabs на уровне ресурса, то он перестанет перетирать правильный источник. Но если у вас в отчетах есть yabs, значит скорее всего у вас проблема с настройкой кода Google Analytics.
Т.е. пользователь приходит из Директа, а потом из-за динамического контента на сайте попадает в yabs.yandex.ru. И вы видите yabs в отчетах.
Если такая проблема есть, то у пользователя, который пришел из Google Ads, тоже перетирается источник. Но из-за того, что у гугла нет специального технического домена, то источник перезаписывается на google / organic.
И вы думаете, что это seo-трафик, а на самом деле это трафик из Google Ads, который неверно засчитался из-за кривонастроенной аналитики.
11 ответов про Yandex справочник
Лайтовая статья, подойдёт для владельцев сайтов услуг.
Указываем любой большой торговый центр. Можете найти похожие организации и посмотреть где они сидят. Затем «разместиться» этажом выше.
Зарегистрироваться и указать адрес.
Есть несколько способов, но я рекомендую создать поддомен (как это сделать можно почитать в кейсе «Экономия 300 000 р в месяц на контекстной рекламе») и зарегистрировать его в справочнике. Через 2-3 дня вы окажетесь на Yandex картах в выбранном регионе.
Совет: записывайте свои фейковые адреса.
Вам могут позвонить и спросить следующее:
— Здравствуйте, меня зовут Анна, сервис Yandex справочник. Верен ли следующий адрес: …….
— Благодарим за подтверждение.
— Здравствуйте, меня зовут Анна, сервис Yandex справочник. Скажите, по какому адресу вы находитесь в городе (город).
— эээээ, нууу… Плохо слышно, я перезвоню.
1. Увеличивает CTR (кликабельность) сниппета (объявление в поисковой выдаче);
2. Один из факторов регионального ранжирования. Другими словами, без него вам могут не присвоить необходимый регион со всеми вытекающими;
3. Даёт небольшой трафик, как следствие поведенческие факторы.
Зависит от услуги. Очевидно — услуги шиномонтажа выгодно, а интернет- магазин дорогих часов — нет. Вот пример из раздела «Развлечения»:
Всю, какую не жалко.
Обязательно — адрес сайта и название компании. Желательно придерживаться такой формулы: «Ключевой запрос + город — название сайта». Пример: «Быстрый шиномонтаж в Ижевске— pitstop.ru». Могут не пропустить, но, если пропустят — будет очень хорошо.
Очень желательно — фотографии входной группы, интерьера.
Нежелательно — некоторые сеошники (в том числе и я :)) раньше делали прикольную штуку.
Указывали разные часы работы, чтобы получить огромный сниппет. К сожалению, не смог найти картинку, но суть такая. Указываем разное время работы на каждый день, Yandex отображает это в сниппете, он увеличивается в размерах — PROFIT. Уже не работает.
Да, смело крутите. Вот несколько советов:
1. Идеальный вариант — сервис workzilla.ru. Заказывайте за 500 р. примерно 10-15 штук.
2. Делайте подробное ТЗ, иначе напишут шлак. Укажите какие должны быть отзывы: сколько звёздочек, в какое время, сколько символов, сколько аккаунтов Yandex, какой должен быть язык (разговорный, деловой и т.д.), от женщин или мужчин.
3. Не заказывайте неестественное количество отзывов. Если сейчас их 0 — закажите 10. Через месяц — 20, еще через месяц 20, ещё через месяц 30. Думаю логика понятна.
4. 70% — положительные, 25% — нейтральные, 5% — негативные, но с дальнейшим решением вопроса.
Да. Хуже не будет 100%. Просто укажите адрес рандомного жилого дома и подтвердите при звонке. Проверено — работает.







