Всем привет! Меня зовут Александр, я разрабатываю ActiveTrip.me — cервис для построения маршрутов для пеших, велосипедных, водных походов и путешествий, а также для хранения и группировки интересных мест в виде меток.

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

Что уже можно делать в сервисе:

  1. Строить автоматически маршрут по тропам и дорогам в зависимости от предполагаемого типа передвижения

  2. Строить автоматически маршрут по рекам

  3. Строить маршрут без привязки к дорогам (по прямой между двумя точками)

  4. Строить несколько маршрутов на одной карте

  5. Отмечать важные места на маршруте метками

  6. Изучать местность благодаря разным картам и слоям

  7. Шарить маршруты и скачивать в форматах GPX и KML

Скоро будет добавлена возможность совместного редактирования маршрутов (как в Figma).

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

  • Работа с картами и слоями. Получение, хранение и раздача пользователям интересующих их карт и дополнительных слоев

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

    • Выбранный способ передвижения: пешком, на велосипеде, на автомобиле, по рекам

    • Тип покрытия поверхности: асфальт, грунт

  • Расчет и предоставление данных о построенном маршруте. В частности о:

    • Протяженности маршрута

    • Типах покрытия поверхности, по которым проходит маршрут: асфальт или грунт. Важно для велосипедистов и внедорожных путешествий

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

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

  • Реализация пользовательского интерфейса для работы с геоданными: отрисовка подложек и слоев, работа с точками маршрута и метками (POI)

  • Хранение и предоставление пользовательской информации о маршруте: добавление изображений, комментариев

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

  • Возможность поделиться созданным треком через прямую ссылку

  • Импорт GPX и KML-файлов в сервис для последующего редактирования. GPX и KML являются форматами представления трехмерных пространственных геокоординат и основаны на XML-разметке. Большинство навигаторов и навигационных приложений (Garmin, Locus, OsmAnd) используют именно GPX-формат, однако некоторые (Maps.me, Organic Maps) поддерживают только KML-формат

  • Экспорт GPX и KML-файлов. После подготовки маршрута на нашем сервисе его можно загрузить в навигатор или в мобильное приложение и отправиться в путешествие

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

  • Прибегнуть к использованию доступных SDK, open source модулей и библиотек, подняв свой собственный сервер

  • Воспользоваться специализированными сервисами, предоставляющими возможность интеграции через API

Построение маршрута

При попытке решения задачи построения маршрутов, мы обратились к известным open source решениям. Стояла задача справиться с минимальными затратами на вычислительные и финансовые ресурсы (на старте у нас был в наличии скромный VPS сервер с 1 ТБ HDD и 4 GB RAM).

Мы попробовали Valhalla, GraphHopper и BRouter

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

Valhalla

Сборка и запуск Valhalla с использованием собственных ресурсов подробно описаны в документации и состоят из двух шагов:

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

  2. Далее скачать OSM-данные нужных регионов и скормить утилите препроцессинга

При развертывании процессинг отдельных небольших регионов осуществляется на упомянутом железе за десятки минут (для Швейцарии потребовалось 20 минут). Процессинг стран Европы и Азии отрабатывал несколько суток и, в итоге, завершился с ошибкой.

GraphHopper

Алгоритм запуска инстанса GraphHopper во многом аналогичен.

Процессинг занимает в разы меньшее количество времени (~12 часов на весь мир), но требует значительного количества RAM. В нашем случае это около ~128 ГБ на препроцессинг и ~64 ГБ для дальнейшей работы сервиса (хранит данные в памяти в сжатом виде).

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

Альтернатива — использование уже развернутой версии GraphHopper Direction API. Бесплатная версия ограничена 500 запросами в день, что даже для реализации прототипа оказалось недостаточно.

Mapbox

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

Также Mapbox хостит и предоставляет возможность использования Valhalla в рамках Navigation API. В бесплатном варианте использования доступно до 100000 запросов в месяц.

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

BRouter

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

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

Возможно обновление данных на регулярной основе (на текущий момент BRouter поставляет свежие данные раз в неделю).

Из недостатков — строит маршрут медленнее, чем решения, построенные на базе Valhalla.

Из ключевых преимуществ — возможность построения маршрутов по воде.

Что мы в итоге используем для построения маршрута?

Для реализации прототипа мы решили ограничиться использованием Valhalla API, предоставляемое Mapbox, для построения маршрутов по земле, для воды использовали развернутый на собственном железе сервер Brouter.

Для оптимизации количества запросов к Mapbox (с учетом ограничения бесплатного использования) мы внедрили следующее:

  1. Построенный пользователем маршрут мы сжимаем с использованием Polyline Encoding алгоритма и кешируем на своей стороне. При повторном обращении к созданному треку мы избегаем лишних вызовов к API и отрисовываем трек на основе сохраненных данных

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

Расчет высоты

Поход к расчету высоты мы посмотрели у создателя проекта Nakarte.me:

  1. Берем открытые данные о высотах из http://viewfinderpanoramas.org

  2. Осуществляем препроцессинг данных о высотах с использованием утилиты и складываем их в БД

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

  4. Данные скачиваются с данного сайта, препроцессятся с помощью утилиты и складываются в SQLite на собственном сервере

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

Геокодирование

Геокодирование используется для повышения удобства использования сервиса.

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

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

  1. Для прямого геокодирования мы используем API от MapyCZ компании Seznam (в статье выше его не упоминают)

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

Для сервиса возможности обратного геокодирования полезны в двух сценариях:

  1. Автогенерация названия маршрута по стартовой точке

  2. Индексация построенных пользователями маршрутов для дальнейшего формирования каталога. Может быть полезно для реализации функциональности вида «найти все построенные треки пользователей, проходящие через село X». При этом относительно дешево решается проблема локализации — API принимает на вход набор необходимых языков

Импорт и экспорт треков

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

Отрисовка маршрутов на карте

На данный момент отрисовка полностью основана на использовании библиотеки Leaflet. Из коробки поддерживается отображение слоёв карт в формате Tiled web map, отображение геометрических объектов, линий и маркеров.

Из возникших и еще не решенных проблем — Leaflet не справляется с одновременной отрисовкой большого числа маркеров (> 100 шт.). Пока обходим это через динамическое отображение в зависимости от масштаба, но такой подход уместен не во всех случаях.

Заключение

Сейчас мы с командой активно развиваем ActiveTrip.me и регулярно выпускаем обновления. Буду благодарен, если найдете время для тестирования и дадите обратную связь.

Также у проекта есть активное русскоязычное сообщество в Telegram. А новости о проекте мы публикуем в Telegram и VK.

Комментарии (49)


  1. unwrecker
    26.03.2022 14:10
    +1

    Полезно, сохранил :)

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


    1. sikmir
      26.03.2022 14:34

      Все верно, BRouter строит только по waterway, а если река проходящая через озеро не соединена в OSM прямой, то маршрут вообще не построится. К сожалению пока нет движков умеющих как-то более умно раутить по водоемам.


      1. hrensgory
        26.03.2022 20:58

        Navionics, iSailor - это не движки, конечно, это продукты.

        Но роутить по воде, при условии, что у них есть данные по нужным участкам они умеют. Причём с учётом осадки судна.


  1. Akr0n
    26.03.2022 15:16
    +1

    Получилось nakarte.me только с подложкой из osm-графа для автоматического построения маршрута? Только проблема в том, что в РФ очень редко есть хорошо размеченные тропами регионы и в большинстве случаев, автоматом оно построит какую-то откровенную чушь.


    1. sunki
      26.03.2022 23:27
      +1

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


  1. virtusha
    26.03.2022 15:49
    +2

    Отличная работа! Тоже нечто подобное делаю только еще и к 1Ске прикрутил...

    А по поводу одновременного отображения "триллионов" маркеров на карте советую использовать отличный плагин Leaflet.markercluster. Работает довольно шустро даже в супер тормозной 1Ске


    1. allex32 Автор
      27.03.2022 03:16

      Спасибо за наводку! Проблема с отображением меток действительно актуальна, будем пробовать


  1. Zed-nsk
    26.03.2022 16:33
    +3

    Замечательно! Спасибо Вам!

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


    1. weart
      26.03.2022 17:23
      +1

      Эх. Gpsies был лучший по построению маршрутов. Алтрейлс и даже комут и рядом не лежат до сих пор (


      1. shirokolobov
        26.03.2022 19:43
        +3

        Это одна из причин, почему мы начали делать ActiveTrip.me :) Я был очень активным пользователем GPSies.


        1. weart
          27.03.2022 11:12
          +1

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


          1. shirokolobov
            28.03.2022 01:02
            +1

            Шик! Если будут вопросы и пожелания, пишите в чат: https://t.me/activetripme_community_ru


    1. shirokolobov
      26.03.2022 19:38
      +4

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


    1. JediPhilosopher
      27.03.2022 13:12
      +1

      Про монетизацию я могу поделиться немного своим опытом (негативным) на основании разработки проекта Sight Safari - прокладчика туристических маршрутов для осмотра достопримечательностей https://habr.com/ru/post/414433/

      1. Платные приложения с картами в 2022 году это нонсенс, нет таких и никто не купит

      2. Реклама на картах, как делают гугл и яндекс, невозможна. Нет таких рекламных сетей, которые бы вам выдавали метки для карты и начисляли бы деньги за клики по ним. Разве что лично договариваться с какими-то заведениями, но там покрытие и доход будет околонулевым.
        У Яндекса, Гугла, Трипадвайзора и прочих есть апи для получения коммерческих объектов на картах, но за клики по ним деньги будут получать Яндекс и Гугл, а не вы.

      3. Платные фичи - на словах легко, на деле очень сложно сбалансировать их так, чтобы люди за них платили.

      4. Баннерная и прочая реклама не работает из-за низкого ретеншена.

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

      Платные фичи тоже не так просто продумывать. Обычно платным делают либо активное использование (ну там два проекта бесплатно, больше - за деньги), либо вот фичи. Но первое - это вообще не про карты для туристов (у большинства, повторюсь, это и так 1-2 раза в год). А какие фичи вы сможете придумать, которые можно вырезать в бесплатной версии но за которые люди будут готовы платить? Из удачного я пока видел только разные картографические подложки с высокой детализацией у Outdooractive. Все остальное какое-то очень сомнительное.

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

      • ViewRanger помер и поглотился Outdooractive (который тоже непонятно как живет и монетизируется).

      • Map.me так и не смогли стать прибыльными, никакой маркетплейс туров и маршрутов их не спас, проект продан и по сути умер (карты не обновлялись уже давно, хоть приложение еще и работает).

      • Всякие сервисы продажи аудиогидов типа izi.travel уже банкротились и выживают тоже хз как.

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

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


      1. shirokolobov
        28.03.2022 01:48
        +1

        Спасибо вам большое, что делитесь опытом, с некоторыми тезисами согласен, с некоторыми нет.

        По поводу удачных примеров: https://www.crunchbase.com/organization/alltrails-com/company_financials

        С удовольствием бы познакомился и пообщался, напишу в личные сообщения :)


  1. Zed-nsk
    26.03.2022 17:05

    А расшареные маршруты других людей будут видны? В Gpsies это была отличная фича.


    1. shirokolobov
      26.03.2022 19:43
      +1

      Будут :)


  1. garbagecollected
    26.03.2022 17:08
    +2

    Хорошая работа. Только одного не понял (может, невнимателен), а тайлы вы откуда берете? Сами рендерите или как? В моих руках Leaflet с соткой маркеров справлялся без особых усилий. А при масштабировании используйте стекирование. Если будете распечатывать карту до бумажного вида, прикрутите к углу карты нормальную линейку, а то не возможно работать с циркулем.

    Линейка на бумажной карте


    1. shirokolobov
      28.03.2022 01:34
      +1

      Спасибо! Печать планируем сделать, про линейку приняли к сведению.


  1. Megas
    26.03.2022 17:33

    Выглядит интересно. Добавил в закладки.


    1. shirokolobov
      26.03.2022 19:44
      +1

      Спасибо! Если будут вопросы, пишите в сообщество :)


  1. GeMir
    26.03.2022 18:17
    +1

    По центральной Европе удобно водит Komoot. Как пешком, так и на велосипеде, к примеру.


  1. Lezvix
    26.03.2022 19:58

    Интересный проект! По поводу меток, в JS есть такая замечательная библиотека для 2D графики, как Pixi, работает очень шустро, на WebGL, и также существует её обёртка на leaflet, можно найти на гитхабе, там есть пример с миллионом меток.


    1. allex32 Автор
      27.03.2022 03:14

      Спасибо большое! Не знали, попробуем :)


      1. bopoh13
        28.03.2022 04:07

        Полтысячи точек без плагинов Leaflet легко подгружает https://github.com/incanus/PointTest/


  1. Serge78rus
    26.03.2022 21:31
    +1

    Попробовал ради интереса построить водный маршрут по р. Уксунйоки от ст. Райконкоски до устья. Чисто из интереса — просто я его хорошо знаю, да и начальную и конечную точку на карте найти просто, в отличие от горных районов. Маршрут действительно построился по реке, но вот что выдалось по этому маршруту:

    Лоймольское — Республика Карелия
    2 ч 14 мин
    99.6 км
    92 м (набор высоты)
    201 м (сброс высоты)

    Я понимаю, что это бета, но все же сразу возникли вопросы:
    • 2 ч 14 мин — это, как я понял, продолжительность. Если так, то на чем, простите, предполагается прохождение? На каяках, помнится, мы шли это порядка недели.
    • Набор высоты 92 м при сплаве по реке вниз по течению — это как?


    1. shirokolobov
      28.03.2022 01:28
      +1

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

      По поводу высоты ответ тут. Продублирую его:

      С высотой вопрос непростой и важный.

      Коротко: сейчас невозможно получить идеальные значения высот, врут (точнее, показывают с погрешностью) абсолютно все сервисы и приборы. Мы, как и все, для расчета высот используем модель, которая основана на SRTM, ASTER GDEM и других. И она не везде точна.

      Подробно: хотел расписать, но вспомнил про уже написанный большой пост организаторами трейлраннинговых стартов (подписываюсь там под каждым словом): https://www.facebook.com/runxru/posts/2423496951256585

      Какие мы видим возможные улучшения у нас:

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

      2. Накапливать базу таких треков и корректировать расчет высот с учетом этой базы.

      Если у вас есть предложения, то говорите, мы открыты)


      1. adson
        28.03.2022 15:01

        с "водой" можно очень просто поступить - длина пути / скорость течения = ЧХВ (чистое ходовое время). А уж с каким темпом будет идти группа - это их дело: может быть и несколько часов (если маршрут известен до каждого камня и слива - так часто бывает с каякерами), и несколько дней (начинающие, например, которые каждое препятствие подолгу осматривают, а потом еще и обносят). Другое дело, что скорость течения может измениться в зависимости от уровня воды...

        Но здесь и с тем же велосипедом аналогия: летом на горно-лесной дороге у меня одна скорость, осенью, когда все лужи и колдобины замерзли - другая, зимой вообще третья


        1. Serge78rus
          28.03.2022 22:09
          +1

          Скорость течения меняется не только от уровня воды, она еще, как правило, очень непостоянна и на протяжении реки. Так что абстрактная «скорость течения» — это фикция.

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


          1. Akr0n
            29.03.2022 01:53

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


            1. Serge78rus
              29.03.2022 03:18

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


    1. alexwlpr
      28.03.2022 16:35

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

      Со временем полная беда. Расстояние 14.1 км, время 19мин. Даже на машине это будет проблемно сделать.


  1. DurRandir
    26.03.2022 21:37

    С временем прохождения маршрута печалька, даже maps.me считал лучше. К примеру, аккем-кучерла через кара-тюрек считает 4:18. Ну нет :)


    1. shirokolobov
      28.03.2022 01:22
      +1

      Есть такое, признаем. Но, увы, в горах невозможно рассчитать адекватное время — таких данных просто не существует. Наверное, будем сообщать, что время может быть некорректным для горных участков. Убирать его совсем не хочется, потому что на равнине оно более-менее показывается. В общем, точно требует доработки


      1. DurRandir
        28.03.2022 10:31

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


    1. Zed-nsk
      29.03.2022 05:25

      А вы уже сходили? И какое время получилось?)


  1. Henderson
    27.03.2022 00:28

    Как же во время я узнал об этом сервисе!


    1. shirokolobov
      28.03.2022 01:31
      +1

      Для каких целей планируете использовать? :)


  1. wkudashov
    27.03.2022 00:28

    Выглядит достаточно удобно. Буду пользоваться. За Strava Run Heatmap отдельное спасибо.
    Было бы здорово, если бы в будущем расшаренные пользовательские точки (вода, стоянки, обзорные площадки) жили в отдельном слое. Это сильно поможет в построении маршрутов по новым районам.


    1. shirokolobov
      28.03.2022 01:29
      +1

      Спасибо! Планируем сделать такой слой :)


  1. Akr0n
    27.03.2022 06:37

    OpenTopoMap, случайно, не забанили российские IP? Не работает ни на вашем ресурсе, ни на других.


    1. shirokolobov
      28.03.2022 01:29
      +1

      Забанили, на днях сделаем, чтобы работал у нас.


  1. karambaso
    28.03.2022 02:13

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


    1. allex32 Автор
      28.03.2022 02:16

      Можете, пожалуйста, уточнить, что именно вы имеете в виду?
      Если речь идет о защите от "ботов", то на этот случай у нас как минимум есть рекапча :)


      1. karambaso
        28.03.2022 14:14

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


        1. Sutar
          28.03.2022 15:01
          +1

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

          По существу: за зависимостями следим, подозрительные активности мониторим.


          1. karambaso
            28.03.2022 20:18

            Ну голову-то, всё-таки, мы из под топора убираем :)

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


            1. Sutar
              28.03.2022 23:10
              +1

              Когда сторонний код постоянно обновляется — да. Только вот фронтенд современный не так работает, если нормально настроен. Всё ведь или закоммичено локально или на лок-файлах и не обновляется без нашего ведома. Внешние скрипты — это разве что рекапчи да метрики всякие.

              Карты — это загрузка картинок с другого ресурса, не скриптов. Скрипты, которые их показывают — под нашим контролем :)

              Вопрос: а вы спрашиваете, потому что переживаете за себя или за нас? ???? Если есть какие-то более конкретные примеры, где в современных реалиях фронтендеры недостаточно бдят и к чему это приводит, был бы вам очень благодарен за них :) А если вы на примере нашего веб-приложения заметили, что что-то конкретное сделано неправильно, так рассказывайте же скорее, буду вдвойне благодарен!


              1. karambaso
                29.03.2022 11:11

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

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

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

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