Проектирование интернет-магазина: личный кабинет, корзина, доставка-оплата, рассылка и другое / Хабр

Что личные кабинеты дают бизнесу

Личный кабинет — это организация какого-либо процесса компании, который раньше был настроен в офлайне. Но из-за оптимизации ресурсов и автоматизации рутины компания перевела его в онлайн. Как мы перечисляли выше, личные кабинеты могут быть в разных цифровых решениях. Перечислим основные возможности.

Унификация бизнес-процессов. Благодаря личному кабинету данные вносятся, собираются и обрабатываются по единым заданным стандартам. Интерфейс «ведёт за руку» пользователя и не даёт ему свернуть не туда.

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

Оптимизация ресурсов. Если верно настроены бизнес-процессы и логика личного кабинета, то пользователи могут самостоятельно решить свою задачу. Представим, что вместо личного кабинета запрос клиента обрабатывает сотрудник. Тогда время решения задачи увеличится, а количество обслуженных клиентов уменьшится. Например, менеджер сможет отработать 15 заявок за рабочий день, а сервис — сотни.

10 Как реализовать меж-доменную идентификацию?

Всё это, конечно, хорошо. Пока работа осуществляется на одном браузере – всё отлично. А как быть с современными реалиями, когда у человека два мобильных телефона, один рабочий компьютер и несколько браузеров на нем, домашний компьютер, и ещё ноутбук?

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


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

Создав при помощи мастер-ключа M персональный ключ K для домена D на одном устройстве, пользователь сможет создать тот же самый ключ K для домена D и на любом другом при помощи всё того же мастер-ключа M и единого алгоритма. Точнее это сделает не пользователь, а его браузер.

Похожее:  Законодательно закреплено понятие личного кабинета налогоплательщика | ФНС России | 50 Московская область

Максимальное удобство для пользователя.

Но и максимальный риск

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

Использование только одного мастер-ключа для генерации всех ключей для всех доменов не всегда удобный вариант. Во-первых, как быть, если вдруг ключ домена скомпрометирован и его необходимо поменять? Во-вторых, что если нужно поделиться ключом домена с другим человеком?

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

7 Авторизация на сайте глазами пользователя

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

Вместо фиксации ключа, пользователь может создать постоянный ключ для сайта и пройти там регистрацию. Анимированная иллюстрация:


А когда пользователь имеет постоянный ключ для сайта и этот ключ там зарегистрирован, то процесс входа существенно упрощается:

Наибольшая сила протокола проявляется, когда пользователь создает ключ для сайта на базе мастер-ключа. В этом случае легко

решается задача вашей идентификации на сайтах на других устройствах

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

Для сайтов с двух-факторной авторизацией «узнавание» может выглядеть так:


Выход осуществляется ещё проще. Нажимаете в браузере «Выйти» и всё:

Браузер посылает сайту запрос (на любую его страницу) с методом HEAD, в котором передает заголовок CSI-Token <>; Logout.

Сервер, видя такой заголовок, делает Logout. Если это был фиксированный ключ, то сайт удаляет всю информацию о пользователе (более такой ключ никогда не появится). Если это был постоянный ключ, просто разрывает сессию.

8 Как происходит смена ключа сайта?


Замена постоянного ключа сайта технически происходит также, как и переход со случайного ключа на постоянный. Более подробнее это описано в

В случае смены постоянного ключа сайта, браузер уведомляет сайт о соответствующем изменении токена, посылая

в каждом последующем запросе

заголовок

CSI-Token

с ключом

Changed-To

Сайт должен корректно обработать такой запрос. И, если данный токен пользователя сохранен в его базе, должен сделать соответствующую замену. При этом сайт должен ответить браузеру об успешном изменении токена на своей стороне. Делает он это в заголовке ответа (Response Headers) параметром:

CSI-Token-Action: success

, с указанием примененного токена.

Сайт имеет право отвергнуть попытку изменения токена (например, если такого токена в его базе не было или он их вообще их не сохраняет) параметром

CSI-Token-Action: aborted.


До тех пор, пока браузер не получит заголовок CSI-Token-Action, он в каждый запрос к сайту в заголовок CSI-Token будет добавлять ключ Changed-To.

Это

аналог «смены пароля» пользователя.

9 Как реализуется кросс-доменная авторизация?

Классическая кросс-доменная авторизация по технологии

SSO

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


Но есть и недостатки.

Вы в зависимости от поставщика SSO.

Если не работает сервер SSO, на целевой сайт вы не попадете. Если вы теряете пароль или у вас угоняют вашу учётку – вы разом теряете доступ от всех сайтов.

Для веб-разработчиков всё чуть сложнее. С начала необходимо зарегистрировать свой сайт на сервере авторизации, получить ключи, научиться работать с протоколом (

SAMLOAuth

0 Алгоритм формирования ключа домена


Настоящий протокол определяет только 2 способа формирования ключей домена

В последнем случае ключ домена вычисляется как:

где

$M_{key}$

– 256-битный мастер-ключ, Domain – доменное имя, для которого делается ключ.


Здесь и далее

HMAC

на основе 256-битной реализации хеш-функции

Компрометация или добровольное разглашение ключа домена не приводит к компрометации исходного мастер-ключа.

Мастер-ключ обеспечивает механизм мобильности учётных данных пользователей.

Если ключ, созданный на базе «мастера», был скомпрометирован, либо был скомпрометирован токен, вычисленный от такого ключа (в результате взлома сайта), то ключ необходимо поменять. Поменять можно на случайный 256-битный ключ, либо сгенерировать от того же «мастера», с добавлением версии:

Здесь и далее символ

$cup$

будет использоваться для операции конкатенации строк (массивов байт).

2 Алгоритм защиты токена при передаче

Исходный токен клиента передается крайне редко. Только при передаче незарегистрированного токена в момент создания сессии.

Токен считается незарегистрированным

, если он: создан на базе случайного (не зафиксированного) ключа; не был принят сервером после отправки ключа Change-To или Permanent. Подробнее см.


Браузер и сервер совместно вырабатывают пару случайных чисел, т.н. соль (Salt), при помощи которой хешируются младшие 128 бит токена. Оба обмениваются этими числами согласно протоколу. Подробнее см.

Таким образом, сервер сайта видит следующий токен:

где

$Hi(T_s)$

– старшие 128 бит,

$Lo(T_s)$

– младшие 128 бит исходного токена,

$cup$

– конкатенация строк. При этом исходный токен

$T_s$

должен быть уже известен серверу.

В идеале CSI-Salt должен меняться при каждом запросе браузера к серверу. Однако это может быть затратным требованием с точки зрения вычислительных ресурсов. Кроме того, это может «убить» возможность отправки параллельных запросов на сервер.Поэтому допускается, в целях оптимизации расчетов, сохранение неизменным значения CSI-Salt в разных запросах, но не дольше одного сеанса.

Это может быть ограничение по времени (смена CSI-Salt каждые 5 минут), либо реакция на интенсивность запросов (смена CSI-Salt через каждые 100 запросов), либо после каждой серии запросов (в момент паузы клиент-сервер), либо смешанный вариант. Здесь решение оставляется за разработчиками браузеров.

Слишком долгое удержание неизменным CSI-Salt ослабляет защиту передаваемого токена, позволяя злоумышленнику, при перехвате токена, воспользоваться им, пока легальный пользователь не выполнил Logout, и выполнить неавторизованный запрос от имени жертвы.

4 Правила формирования поля Context

Будем называть

нашим

тот домен, страницу которого мы загружаем (отображается в адресной строке браузера). Остальные домены будем называть

внешними

. Даже если это дочерние домены данного.

Назовем ресурс внешним, если он был загружен с внешнего домена. Назовем ресурс внутренним, если он был загружен с нашего домена. Ресурсом может быть скрипт, изображение, ajax-запрос и любой другой файл.

Скрипт считается внешним, если он был загружен с внешнего домена. Скрипт, размещенный в созданном теге <script>, созданный внешним скриптом, тоже будет считаться внешним. Скрипт, располагаемый в измененном теге <script>, объявляется внешним, если изменялся внешним скриптом, или внешний скрипт присутствовал в цепочке вызовов при изменении его содержимого. Даже если при этом данный <script> изначально был на странице или был создан внутренним скриптом.

Назовем теги LINK, SCRIPT, IMG, IFAME и другие, которые требуют от браузера догрузить какой-либо ресурс, как только будут встречены парсером DOM – ресурсными тегами.

Назовем теги FORM, A, META и другие, которые могут инициировать загрузку страницы при определенных условиях (submit, click, timeout) – инициирующими тегами.

Назовем тег статическим, если он изначально присутствовал на странице при первичной выдаче сервером. Назовем тег динамическим, если он был создан в процессе работы скриптов.

Тег FORM объявляется динамическим, даже если изменялся не только сам тег, но и значения всех полей INPUT, связанных с этой формой.

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

Загрузка страницы провоцируется инициирующими тегами. Инициирующий тег может быть приведен в действие непосредственно пользователем, либо активирован скриптом, через выполнение команды click (для ссылки), и submit (для формы) или через генерацию скриптом соответствующих событий onclick/onsubmit.

7.1 Алгоритм расчета сайтом возможных токенов пользователя по известному ключу

Если нам известен ключ K домена, мы легко можем рассчитать возможный «валидный» токен T пользователя, который придет с его запросами. Для этого необходимо, чтобы было выполнено условие: инициатор запросов, получатель запросов и контекст выполнения должен совпадать и быть равен домену. Иными словами, если у нас доменное имя vsphere.local, то:

Sender = Recipient = Context = vsphere.local

Отсюда исходный (сырой) токен рассчитывается, как:


При передаче, исходный токен будет дополнительно защищен. Младшие 128 бит токена будут хешированы солью, передаваемой в заголовке запроса CSI-Salt

*

. Таким образом, сайт увидит следующий токен:

Где

Hi

– старшие 128 бит,

Lo

– младшие 128 бит исходного токена.


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

1 Защита ключевой информации от НСД

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

А вот способы защиты ключей от компрометации необходимо рассмотреть подробнее.

Ключи могут быть скомпрометированы путем:


Если допустить, что ключевая информация сохраняется на смарт-карте (мы рассматривали данный вариант в разделе

), то задача защиты ключевой информации перекладывается на плечи чипа. Правда появляется уязвимость к клавиатурным шпионам, которые могут перехватить вводимый PIN-код; ну и неудобность в использовании.

Помимо смарт-карт для защиты от прямого доступа к ключевой информации можно использовать симметричное шифрование. Но вопрос: какой ключ взять для шифрования?

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

Более правильный вариант зашивать особым образом* такой ключ в сборку браузера (или одной из его специализированных библиотек). При каждом обновлении браузера меняется и ключ, и место его расположения в скомпилированном файле.

Также сами ключи доменов непосредственно должны храниться в отдельном файле, а не совместно с конфигурацией по их использованию (т.е. только ключи и ничего более). Тогда их расшифровка методом подбора ключа (из известных сборок) будет невозможна, ибо отличить правильно расшифрованный ключ от случайной последовательности байт – невозможно.

Можно применить комбинированный вариант: шифрование ключом от браузера шифрование паролем пользователя от учетной записи ОС (если это позволяет API ОС). Причем ключ всегда генерируется «на лету». Тогда офлайновый брутфорс станет ещё затратнее.

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

Вы же предварительно сделаете резервную копию ключей (экспортируете ключи в файл). Если, конечно, уже не сделали этого ранее при распространении ключей на другие устройства.

2 О паролях в качестве ключей доменов

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

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

  1. Если сайт знает свой токен, то сайт может восстановить «брутфорсом» пароль, который был положен в основу формирования ключа домена, формирующий этот токен. А если предположить, что этот пароль пользователь использовал ещё где-либо, то мы получим ключи доменов и от других сайтов пользователя.

    Допустим (гипотетически), что вы используете сложный 8-ми символьный пароль, состоящий из символов латинского алфавита разного регистра, цифр и таких спец.символов: ~!@#$%^&. Общий алфавит составит: 26 26 10 8 = 70 символов. 8-символьный пароль на таком алфавите имеет ёмкость 708 вариантов.

    Представим, что злоумышленник имеет специализированный кластер, способный вычислять наши токены из пароля со скоростью 1012 вариантов в секунду. Тогда для взлома ему потребуется 708 / 1012 = ~576 сек. Т.е. ваш пароль будет гарантировано подобран за ~10 минут. А в среднем такой системе будет достаточно потратить лишь 5 минут на подбор пароля от известного токена. 10-символьный пароль потребует уже в среднем 15 суток. Но повысив производительность системы в 10 раз, мы сократим это время до 1-2 суток.

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

  2. Такой пароль уязвим не только к брутфорсу, но и к клавиатурным шпионам.
  3. Если два незнакомых друг другу пользователя придумают для одного и того же популярного сайта одинаковый пароль, то они получат одинаковый токен. Т.е. пароли могут вызвать конфликт токенов (несмотря на длину хеша и всю мощь SHA-2).
  4. Ну и, наконец, создавая протокол, я хотел вообще уйти от паролей. А на самом деле лишь похитрее их спрятал.

3 Риски потери/компрометации ключей и их минимизация

А что если я потеряю мастер-ключ?

Такое может произойти, если вы поменяли пароль или переустановили ОС. Какие риски?

Ну вы не попадете на сайты, где были раньше. Потеряете историю покупок на интернет-магазинах, свои объявления на интернет-площадках, карму на форумах. Не беда.

Хотя, кто мешает сделать процедуру перерегистрации с новым токеном и подтверждением его через телефон, указанный в том же объявлении? Получается, что сайту необходимо делать форму перерегистрации токена (аналог «восстановления пароля»)? Где же обещанное отсутствие «всяких таких» форм?

На самом деле сайту, которому необходимо не просто идентифицировать посетителя, а ещё и знать кто это на самом деле, придется делать форму регистрации. Собственно, эта форма может использоваться для повторной регистрации. Вы указываете ровно те же данные, что и ранее (email, mobile).

Но всё-таки, лучше не терять мастер-ключ.

Как предотвратить потерю? Создавать резервную копию, защищать её паролем и хранить на отчуждаемых носителях. Так же, собственно, как это делается с ключами для bitcoin. В принципе, можно переводить мастер-ключи в печатный вид и сохранять на бумажке. Если на то пошло. А потом восстанавливать ручным вводом. Но это уже для совсем «параноиков», вроде меня.
А что если у меня угонят мастер-ключ?

Это уже серьезно. Хотя описываемые здесь рекомендации по хранению мастер-ключа (не входят в протокол) защищают их от прямого НСД, клавиатурных шпионов и троянов, тем не менее, риск компрометации мастер-ключа сохраняется. К сожалению, идеальной защиты не существует. Ключ может быть угнан прямо из памяти браузера через уязвимость движка javascript. Как пример. Или вы теряете мобильник…

Так какие риски угона мастер-ключа?

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

Здесь необходимо быстро перерегистрироваться с новым ключом на важных сайтах. И, если случилось страшное, регистрация вашего нового токена в БД поставщика услуг официальным способом, – единственный правильный вариант. Способов регистрации можно придумать множество: от бумажной фиксации в официальном письме, до заявки через службу техподдержки сайта с подтверждением личности приемлемыми способами. Но это только для серьезных сайтов, вроде онлайн-банка.

Способы минимизации рисков. Использование индивидуальных ключей для доменов (но это понижает мобильность учёток). Двухфакторная аутентификация по независимым каналам. Показ сайтом IP-адресов и устройств, откуда было подключение в последний раз, чтобы вы хотя бы вовремя заметили компрометацию.

1 Трекинг пользователя

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

Чтобы два разных сайта могли определить, что работают с одним и тем же клиентом, применяются две техники:

  1. Выполнение одного сайта в контексте другого и взаимный обмен собственно сгенерированными идентификаторами пользователей (в качестве идентификатора может использоваться всё, что угодно из вашего профиля).
  2. Формирование отпечатка браузера по единому алгоритму (формирование уникального набора атрибутов браузера) и косвенная идентификация клиента по этому отпечатку.

В схеме 2 есть небольшой недостаток:

идентифицируется не пользователь

, а браузер. Но зачастую браузер == клиент.

Кажется, токен лучшим образом подходит к использованию в схеме № 2. Ведь если пользователь разрешил «запомнить» себя двум сайтам (действующим в паре), наш постоянный токен может выступить в роли такого «отпечатка», только уже не браузера, а самого пользователя. Проблема для сайтов здесь в том, что они получат разные токены.

Но ведь сайты могут попробовать применить ещё и схему № 1. Тогда получится следующее.

Сайт 1 получит от браузера код H1, а сайт 2, выполняемый в контексте сайта 1 – код H2. Кажется, теперь сайты могут сформировать пару (H1, H2) и даже передать это некому сайту-агрегатору.Пусть есть ещё один сайт 3, который работает в паре с сайтом 2, пытаясь вас отследить.

Сайт 3 получит от браузера токен H3, а сайт 2, выполняемый в контексте сайта 3 – токен H2′ != H2 (см. как формируется токены). Как результат, объединение полученных данных невозможно, т.к. у них нет пересекающихся частей.

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

Вариант защиты: выходить из сайтов, с которыми вы закончили работу. Браузер может делать это автоматически при закрытии вкладки.

5 Компрометация ключа для SSO

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

Токены для каждого сайта рассчитываются индивидуально на базе ключей доменов.

Компрометация одного ключа домена не ведет к автоматической компрометации всех остальных.

Большинство сайтов, где вы уже авторизовывались ранее при помощи SSO, наверняка сохранят в своей базе ваш токен с вашим профилем с сервера SSO. В нашей схеме, сайт просто будет подтягивать токен из БД и опознавать вас. Т.е. на таких сайтах сервер SSO уже не нужен – он выполнил свою функцию на этапе регистрации.

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

Не поможет злоумышленнику и попытка провести заново кросс-доменную аутентификацию: сайт должен блокировать попытки создания новой учетной записи со старым Id-пользователя SSO и новым токеном сайта. Либо попытки перезаписи токена пользователя для существующего Id в процессе SSO должны блокироваться.

Риск. Если сайт, не сохраняет в своей базе ваш токен и профиль, а целиком полагается на механизм SSO, тогда злоумышленнику достаточно провести кросс-доменную аутентификацию, чтобы авторизоваться под вашем именем.

Минимизация рисков при компрометации. Как ни странно, но это – сохранение сайтами токенов и профилей пользователей на своей стороне. Попытка злоумышленником провести кросс-доменную аутентификацию может вызвать конфликт между старым Id-пользователя и новым его токеном.

Максимальный риск: авторизация от вашего имени на других сайтах (где вы ещё не были). Доступ к данным вашего профиля. Совершение незаконных действий от вашего имени. А чтобы законный владелец не смог ничего вернуть, злоумышленник может поменять на сервере авторизации свой токен легальным способом. Этот риск, впрочем, совпадает с рисками, при использовании традиционных схем авторизации.

Способы защиты. Отказ от использования SSO (тем более, что предлагаемая схема и задумывалась как способ уйти от централизованных схем аутентификации). Использование нескольких SSO (не храните все яйца в одной корзине!).

Если SSO поддерживает двухфакторную аутентификацию с подтверждением личности по иным атрибутам (почта, телефон), то существует возможность восстановления контроля над учёткой сервера авторизации.

Доставка

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

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

Рис. 9 Доставка.

Основные виды доставки:

1.Адресная доставка2.Самовывоз3.Почта

Большинство покупателей до сих пор пользуются пост оплатой, при получении товара, поэтому самый выгодный вариант доставки для интернет-магазина – это самовывоз (с условием, что есть склад). Довольно большой процент пользователей могут отказаться оплачивать свои заказы после доставки, в этом случае магазин заплатит сначала за доставку, а затем за возврат товара, что будет означать чистый убыток.

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

В интерфейсе магазина мы можем первым показать нужный нам вариант доставки и оплаты или даже предложить дополнительные скидки для стимуляции выгодных магазину действий (например, если адресная доставка нам будет стоить 3% от суммы заказа, мы можем предложить клиенту скидку 3% при выборе самовывоза).

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

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

Интеграция с социальными сетями

Еще один важный аспект работы интернет-магазина, который влияет на продажи. За последние 10 лет подавляющая часть пользователей Интернета начала использовать социальные сети, поэтому любому интернет-магазину важно максимально интегрироваться с ними, чтобы получить дополнительный приток посетителей и как следствие покупателей.

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

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

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

Рис. 5. Интеграция с социальными сетями.

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

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

Для страницы товара, статей и новостей нужно сделать блоки Like и Share, что позволит пользователям делиться информацией со своими друзьями и опять же даст дополнительный приток посетителей. Эти кнопки обычно размещаются под основной информацией на странице и имеют стандартный вид.

Как создать личный кабинет, который понравится пользователям

Зачем делать личный кабинет

Личный кабинет на сайте — это раздел, доступный пользователю после авторизации.

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

Чем это удобно компании?

Проектирование интернет-магазина: личный кабинет, корзина, доставка-оплата, рассылка и другое / Хабр

Личный кабинет от Leavingstone https://dribbble.com/Leavingstone для сбора статистики

Баланс удобства и безопасности

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

Автор телеграм-канала Про удобство https://t.me/proudobstvo Михаил Греков советует по каждому полю на форме регистрации задавать себе вопрос: нужна ли эта информация именно при регистрации. Кроме того:

Проектирование интернет-магазина: личный кабинет, корзина, доставка-оплата, рассылка и другое / Хабр

Форма авторизации на сайте журнала Сноб

Пользовательский путь

Google Cloud советуют, как сделать сценарий использования аккаунта привычным и безопасным:

  1. Оставьте возможность сохранять пароли. Они должны храниться в зашифрованном виде с помощью, например, PBKDF2, Argon2, Scrypt, или Bcrypt. Разрешите пользователям использовать любые символы и длину пароля, ведь они защищены криптографией.
  2. Разрешите авторизацию через соцсети, так вы избавляете пользователя от необходимости запоминать еще один пароль.
  3. Используйте двухступенчатую верификацию. У подтверждения по SMS много слабостей, но это удобно пользователю и многократно повысит уровень безопасности.
  4. Разделите концепт авторизации пользователя и личного кабинета. Ваши пользователи — это не имейлы, номера телефонов или ID. Пользователи на сайте — это уникальный набор персональных данных и опыта использования вашего сервиса.
  5. Разрешите нескольким ID присоединяться к одному личному кабинету. Пользователь, неделю назад заходивший под логином и паролем, может выбрать авторизацию через Google, не понимая, что он создает второй аккаунт.
  6. Разрешите удалять аккаунт и сопутствующие данные.

Проектирование интернет-магазина: личный кабинет, корзина, доставка-оплата, рассылка и другое / Хабр

Среди хороших примеров пользователи Quora предсказуемо называют Facebook, Google, LinkedIn, Twitter, Invision, а также отмечают удобство аккаунтов платформы для блогов Medium:

Проектирование интернет-магазина: личный кабинет, корзина, доставка-оплата, рассылка и другое / Хабр

Функциональности

Проектирование интернет-магазина: личный кабинет, корзина, доставка-оплата, рассылка и другое / Хабр

Личные кабинеты можно разбить на два типа.

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

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

Там могут быть функциональности управления услугами, оплаты, бонусной программы. Все функции открываются после регистрации.

Проектирование интернет-магазина: личный кабинет, корзина, доставка-оплата, рассылка и другое / Хабр

Best practice

Личный кабинет как записная книжка, в которой делаются отметки. Фокус в интерфейсе на удобство использования и информационную архитектуру.

Если на продуктовом или промосайте большую роль играет эмоциональное вовлечение, то в персональной зоне этого не бывает. Этот фактор накладывает отпечаток на все: интерфейс, look&feel, структуру меню и страниц кабинета.

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

Построение информационной архитектуры начинается с определения аудитории и бизнес-задачи. В результате личный кабинет становится частью будущего продукта.

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

Проектирование интернет-магазина: личный кабинет, корзина, доставка-оплата, рассылка и другое / Хабр

На сайте Alfa Travel пользователь в Личном кабинете узнает баланс накопленных миль и обменивает их на билеты.

Подводим итог

  1. Личный кабинет пользователя входит в UX-экосистему.
  2. Интерфейс гораздо более рациональный и менее эмоциональный, чем сайт.
  3. Акцент на пользовательском взаимодействии и интерфейсных характеристиках продукта.

Проектирование интернет-магазина: личный кабинет, корзина, доставка-оплата, рассылка и другое / Хабр

Личный кабинет для обмена купонами от Rwds

Как происходит разработка личных кабинетов

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

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

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

Формирование product vision и требований. После того как все данные изучены и цели создания личного кабинета прояснены, формируем product vision. В документе фиксируем все требования и приступаем к разработке.

Проектирование интерфейса. Прорабатываем UX/UI-дизайн личного кабинета. UX отвечает за структуру интерфейса, удобство использования, а UI за визуальную оболочку. Учитываем дизайн сервиса и следим, чтобы интерфейс личного кабинета органично вписался.

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

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

Внедрение. Бесшовно встраиваем личный кабинет в ваш сервис. Следим, чтобы результат выглядел так, как описано в product vision.

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

Оплата

Сегодня большинство клиентов предпочитают платить при получении товара. Магазину же выгодно получить деньги в форме предоплаты. Тут стает нелегкий выбор: 1. Позволить оплачивать при получении, что приведет к вынужденному увеличению оборотных средств магазина и риску не оплаты определенного процента заказов. 2.

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

Оплату можно реализовать двумя способами: через систему приема платежей (посредник) или подключать напрямую. Система приема платежей позволяет оплатить товар десятками разных способов, но при этом берет комиссию в размере 3-5% от суммы покупки. Привязывать напрямую более трудозатратно, но при больших объемах это окупается.

Основных способов оплаты, которыми реально пользуются многие люди, не так много. Это делает системы приема платежей для большинства не сильно востребованными, если только в разрабатываемом магазине нет какой-то специфики. Я рекомендую привязывать оплату напрямую, а это в частности пластиковыми картами (Visa, MasterCart) и электронными деньгами (WebMoney, Яндекс.Деньги). Остальные способы оплаты делаются в ручном или полуавтоматическом режиме.

Рис. 10 Оплата.

Основные виды оплаты:

1. Наличными курьеру (3-4% комиссии налоги)2. Наличными в офисе (без комиссии налоги)3. Пополнение пластиковой карты (0,5%-1,5% комиссии налоги)4. Оплата пластиковой картой (3% налоги)5. Счет-фактура (0,5%-1,5% комиссии налоги)6. Электронные деньги (1-3% налоги)7. Наложенный платеж8. Кредит (рассрочка)

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

Доставку и оплату лучше разбить на шаги: сначала выбирается способ доставки, затем подгружаются дополнительные поля, затем выбирается способ оплаты, затем подгружаются дополнительные поля или непосредственно оплата (если она осуществляется on-line в автоматическом режиме).

Перенос через физическое отчуждаемое устройство

Смарт-карты и usb-токены могут вполне подойти в качестве защищенного хранилища ключевой информации (ибо для этого и создавались). Двухфакторная аутентификация защищает ключи от НСД при непосредственном доступе к устройству.

Правда для смарт-карт требуются специальные считыватели (не говоря уже про драйвера), что ограничивает их применение только рабочими станциями, оборудованными такими считывателям.

С USB-токенами чуть проще. Требуются только драйвера. Вот только такой токен в телефон не воткнешь. И хотя для мобильных телефонов существуют токены, выполненные в виде SD-карт, не сказать, что данное решение добавляет к мобильности. Попробуй вытяни карту из мобильника, да вставь в другой. И речь не о том, что это невозможно. Речь о том, что это не удобно.

А если токен поломается? Тогда все ваши ключи уйдут к «Великому Ктулху».

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


Да и, честно говоря, не защищены такие устройства от клавиатурных шпионов. Вот если бы пин-код вводился бы с самой карты/токена. Тогда другое дело. Но я таких в природе не видел.

Плюсы: можно использовать случайный 256-биные ключи; высокая безопасность за счёт использования двухфакторной аутентификации; высочайший уровень защиты от прямого НСД.
Минусы: зависимость от устройств; требует финансовых затрат; низкая мобильность; необходимость резервирования карт и, как следствие, синхронизации данных между ними; уязвимость к клавиатурным шпионам сохраняется.

Сервис по изучению английского языка

В этом проекте функциональные особенности личного кабинета зависят от роли пользователя в системе. Есть 4 роли — администратор, партнёр, преподаватель, студент, у них разные возможности.

Администратор приглашает преподавателей, партнёров к сотрудничеству, следит за оплатой и действиями других ролей, управляет пакетами занятий, выдаёт персональные скидки.

Личный кабинет администратора в сервисе английского языка
ЛК администратора


Партнёр заключает договор, создаёт и оплачивает пакеты занятий, приглашает студентов, следит за статистикой обучения, выбирает расписание групповых занятий.

Личный кабинет партнера в сервисе английского
ЛК партнёра

Преподаватель заключает договор с администратором, устанавливает ставку, задаёт время уроков в расписании, оценивает знания студентов, следит за статистикой прогресса учеников.

Личный кабинет преподавателя в сервисе английского
ЛК преподавателя

Студент выбирает пакеты занятий, расписание занятий, преподавателя, оплачивает уроки.

Личный кабинет ученика в сервисе английского
ЛК ученика

Синхронизация через онлайн-сервис

«Облачные технологии» сейчас пихаются куда только можно. Похоже они, вкупе с блокчейном, стали заменой «банано-технологиям». Естественно, возникает желание, использовать некую интернет-площадку для обмена ключевой информацией. Этакая смарт-карта «онлайн».

А что? Авторизуешься по нашей схеме анонимно на таком сайте; отправляешь туда свои ключи зашифрованные паролем; заходишь с другого устройства на этот же сайт с тем же ключом/паролем; получаешь от туда ключи; синхронизируешь изменения по дате правки. Аналогично менеджеру паролей, только это онлайн.


Вот только, никто не гарантирует, что онлайн-сервис не будет взломан или не станет сам сливать ваши, пусть и зашифрованные, ключи «куда надо». Кто будет за бесплатно реализовывать такой сервис. То-то и оно.

Хотя, конечно, пароль защищает ключи от прямого использования. Но устойчив ли ваш пароль к брут-форсу «офлайн»? Тот ещё вопрос.

Плюсы:высокая мобильность учетных данных; независимость от устройства и браузера; нужен всего один единственный пароль (хотя от пароля не ушли, но уже лучше).
Недостатки:менее безопасно, чем хранение ключей на отчуждаемом носителе. Фактически безопасность ключей основана на стойкости пароля к подбору.

Можно, конечно, использовать для шифрования других ключей мастер-ключ. Тот самый, при помощи которого вычисляются другие ключи доменов. Как вариант.

Система бронирования отелей

Без авторизации посетителю доступен почти весь арсенал фильтров, выбора, сравнения, изучения оставленных отзывов. Сервис предоставляет почти неограниченные возможности, чтобы максимально подвести клиента к шагу покупки. И только на самом последнем шаге, когда человек нажимая кнопку «Я бронирую» уже спланировал и учел все мелочи, описанные здесь же на веб-ресурсе, система просит войти в кабинет:

Это отличный пример построения воронки продаж.

После аутентификации пользователю станут доступны опции бронирования, изменения заказа, оставить отзыв и т.д.

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

  • ввод дополнительного кода, который генерируется в момент регистрации и отправляется на телефон или почту;
  • подтверждение через ввод дополнительного пароля;
  • современные системы могут использовать QR-коды.

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

Уведомления


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

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

Вторая группа уведомлений касается заказов покупателя: прием заказа, статус оплаты, статус доставки. Тут важно, чтобы товар не потерялся на пути от интернет-магазина до конечного покупателя.

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

Некоторые особо важные уведомления, можно дублировать и на телефон и на email. А после можно еще и контрольный звонок покупателю сделать, на случай, если уведомление он пропустил. Это в частности касается прибытия товара на пункт самовывоза.

Если у нас есть и email и телефон и вдруг email перестает работать, можно уведомить об этом пользователя и попросить внести изменения в личные данные.

Заключение

Несколько моих знакомых, которым я показал статью, задавали мне по сути один и тот же вопрос: «А в чем здесь главная фишка?»

Если смотреть с высока

И действительно, поверхностный обзор протокола оставляет о нем впечатление (особенно с точки зрения конечного пользователя), как об ещё одном (очередном?) парольном менеджере, встроенном в браузер.

Ну, если сравнивать с парольными менеджерами, то всё-таки разница есть. Не уверен, что существует единый менеджер, реализованный в виде плагина для всех браузеров, работающий на всех платформах и умеющий синхронизировать ваши пароли между устройствами. Да ещё и бесплатный и открытый (чтобы из исходников собрать, в случае чего). Да и не факт, что разработчик такого менеджера не решит сделать «тихий слив» ваших учёток под благим предлогом «онлайн-синхронизации».

Серверы кросс-доменной авторизации тоже решение «так себе». Те же яйца Тот же парольный менеджер, только сбоку «онлайн». Тут вы доверяете владельцу сервера, а не разработчику менеджера. Но сервер могут взломать (и не важно Google это, или Facebook – утечки происходят рано или поздно у всех). Сервер может быть недоступен (вдруг его DDOS-ят или там просто тех.работы – ЕСИА в пример) или заблокирован каким-либо органом. Да и вообще, такие серверы под маской SSO любят собирать о вас слишком много информации, и нередко становятся целью хакеров со всего мира. Вам это нужно?

К тому же, мне, например, не прельщает перспектива регистрироваться в хомячковых соц.сетях только затем, чтобы авторизоваться на очередной интернет-барахолке и разместить там объявление купи-продай. Тем более, что регистрация в таких соц.сетях, становится всё строже и строже. Раньше требовался лишь подтвержденный email, потом телефон. Сейчас в наглую требуют реальную фотографию. Не удивлюсь, если скоро от нас будут требовать сдать отпечатки пальцев и кровь на анализ. Вам точно это нужно?

Я хочу интернет-независимости. А вы? SSO – не делает на свободными.

Наконец, есть же во многих браузерах встроенная фишка «запомнить пароль». Правда эта фишка исчезает при первой же переустановке ОС. Да и с мобильностью тут неважно. Даже между браузерами в пределах одного устройства. Фактически проблема с хранением паролей и их синхронизацией отдана на откуп самому пользователю. Крутись как можешь, чувак.

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

Так всё-таки, неужели в предлагаемом протоколе нет ни какой особой фишки?

О вот нет главной фишки!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *