- PVSM.RU - https://www.pvsm.ru -

Как спихнуть на соседа счёт за пользование услугами Yandex Maps API или для чего IT гиганту нужен контроль качества

С 10 июня 2019 [1] (а технически с ноября 2019), Яндекс прекратил поддержку анонимного использования сервисов JS API [2] & HTTP Geocoder [3] — тарифицируемые запросы к API (поиск, геокодирование, панорамы и т.д.) перестали работать. Но адекватного биллинга и трекинга запросов Яндекс — не предоставил. Если интересно как спихнуть счёт за геокодирование на гигантов рунета (перечисленных партнёров на заглавной странице сервиса [4]), а так же — как трекинг запросов делается «по уму» — прошу под кат.

Почему появилась эта статья

Я бы не написал этот пост, если бы уважаемый valshavel [5] не отклонил мой комментарий к статье «Как мы внедряли WebAssembly в Яндекс.Картах и почему оставили JavaScript» [6]. Там задавался вопрос «почему».
Писать в техподдержку Яндекс карт — по опыту за 10 лет — не эффективно, ощущение что там только один разработчик который тянул весь проект. На самом деле, вместо Сбербанка — золотую акцию надо было дать этому разработчику и ещё пару процентов обычных.

«Как оно работает» с JS API карт

Компания или разработчик регистрируется в личном кабинете разработчиков Яндекса. И создаёт ключ (похож на UUID). Ключ не имеет никаких настроек (Домен, лимиты и т.д.) и служит только для разделения тарификации.

На странице где требуются функции карт — вставляется JS скрипт и API ключ [7]: (URL для «платной» версии может отличаться).

<head>
    <script src="https://api-maps.yandex.ru/2.1/?apikey=ваш API-ключ&lang=ru_RU" type="text/javascript">
    </script>
</head>

Заметили? Нет? Следите за пальцами:

  1. Ключ является публичным. (АЛЛО! какой нафиг биллинг по публичному API ключу?).
  2. На ключе отсутствуют настройки (Привязки к домену, сервису, лимиты).
  3. Любой может взять ваш ключ и использовать в любых целях (это не запрещено законом, вы сами его публикуете на своей странице и рандомный хеш не является объектом авторского права).

Далее статью можно было бы не писать. Но мы ведь за добро и за своё бабло, учитывая что размещая этот ключ — оно тратится третьими лицами.

Давайте подумаем, что нужно сделать папе(не биологическому, но всё же) рунета (и тому герою-разработчику), чтобы дети не страдали:

  1. Одна карта — один ключ (https://www.mapbox.com/).
    Ключ относится к конкретной карте. В настройках ключа прописываются разрешённые домены (не забудте про wildcard). По ключу запрещается геокодирование через HTTP API.
  2. Лимиты запросов.
    Я не хочу попась на деньги из-за злоумышленников.
  3. Авторизация к ключу / Приватный ключ.
    Я хочу ключ для своих сервисов которые используют геокодинг и отдельный билинг по ним.Я не хочу чтобы джун залез в ЛК и взял мой ключ для публичной карты.

Пока это всё отсутсвует — любой может взять ваш ключ и геокодить в удовольствие.

Всем добра и берегите свои ключи =)

Автор: ReDev1L

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/337357

Ссылки в тексте:

[1] С 10 июня 2019: https://yandex.ru/blog/mapsapi/prekraschaem-podderzhku-anonimnykh-servisov

[2] JS API: https://tech.yandex.ru/maps/jsapi

[3] HTTP Geocoder: https://tech.yandex.ru/maps/geocoder

[4] перечисленных партнёров на заглавной странице сервиса: https://tech.yandex.ru/maps/jsapi/#examples

[5] valshavel: https://habr.com/ru/users/valshavel/

[6] «Как мы внедряли WebAssembly в Яндекс.Картах и почему оставили JavaScript»: https://habr.com/ru/company/yandex/blog/475382/

[7] вставляется JS скрипт и API ключ: https://tech.yandex.ru/maps/jsapi/doc/2.1/dg/concepts/load-docpage/

[8] Источник: https://habr.com/ru/post/476754/?utm_campaign=476754&utm_source=habrahabr&utm_medium=rss