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

в 15:29, , рубрики: api, fuckup, javascript, Maps API, как делать не надо, Разработка веб-сайтов, яндекс

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

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

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

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

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

На странице где требуются функции карт — вставляется JS скрипт и API ключ: (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

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js