Как настроить ограничения для API-ключа

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

Примечание

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

Какие ограничения можно использовать

IP-адрес — адрес устройства, с которого отправлен запрос. Для запросов, отправленных с сайтов, это адрес устройства пользователя (не адрес сервера, на котором размещается сайт). Для запросов, отправленных с сервера или локального устройства, IP-адрес совпадает с внешним адресом сервера или устройства.

Домен — переданный в заголовке Referer запроса домен. Для запросов, отправленных с сайтов, заголовок обычно указывается автоматически и совпадает с адресом страницы. Некоторые сайты используют контейнеры или не передают Referer. Если запрос отправлен с сервера или с локального устройства (например, с помощью curl), заголовок необходимо указать самостоятельно.

Как добавить настройки для API-ключа

Чтобы прописать разрешенные домены и IP-адреса для вашего API-ключа:

  • Зайдите в Кабинет разработчика.

  • Выберите нужный вам ключ и нажмите Изменить.

  • Укажите список IP-адресов, с которых можно делать запросы, по одному адресу в строке. Поддерживаются как IPv4, так и IPv6 адреса, а также подсети. Например, можно указать адреса следующим образом:

    192.0.2.0
    192.0.2.0/24
    2001:db8::/32
    

    Примечание

    При загрузке карты используется IP-адрес устройства пользователя. При работе с JSAPI мы рекомендуем использовать ограничение по домену.

  • Укажите список доменов, с которых можно делать запросы. Информация о доменах передается в заголовке Referer. Домены указываются по одному в строке, без указания протокола, порта, URL-схемы и параметров (например, yandex.ru). Все поддомены автоматически добавляются в список разрешенных. Например, можно указать домены следующим образом:

    yandex.ru
    yandex.com
    maps.yandex.ru
    example.com
    

Введенные ограничения начинают работать через 15 минут после заполнения формы.

Как проверяются ограничения для API-ключа

Проверка ключа производится следующим образом:

  • Если указаны и IP-адрес и домен, достаточно совпадения одного из значений. Например, пользователь с незнакомого IP-адреса, может пользоваться картой на указанном сайте.
  • Если указан только домен, он должен совпадать с заголовком Referer.
  • Если указан только IP-адрес, он должен совпадать с IP-адресом адресом источника запроса.
  • Если поля не заполнены, карту можно использовать на любом домене и с любого адреса.

Как отобразить карту в контейнере

При отображении карты в контейнерах, например, WebView или iframe, устройство пользователя может передать некорректный HTTP-referer. Ниже приведены рекомендации по работе с популярными контейнерами.

iframe

Современные браузеры передают адрес загруженной в элементе iframe страницы. Достаточно указать домен страницы с картой в Кабинете разработчика.

Android webView

При использовании webView на Android устройствах необходимо указать заголовое Referer с помощью расширенной функции loadUrl:

// Сайт, который будет загружен в webView.
String url = "http://www.myserver.ru/";

// Карта, указывающая заголовок Referer.
Map<String, String> headers = new HashMap<String, String>();
headers.put("Referer", "http://www.mymap.ru/map.html");

// Загрузка webView с необходимыми параметрами.
WebView wv;
wv = (WebView) findViewById(R.id.webview);
wv.loadUrl(url, headers);               
iOS UIWebView

При использовании UIWebView на iOS устройствах необходимо указать заголовок Referer в запросе, отправленном UIWebView. Для этого используется метод - setValue:forHTTPHeaderField:. Например, можно указать его следующим образом:

NSMutableURLRequest* request = ...;
[request setValue:@"https://www.mymap.ru" forHTTPHeaderField: @"Referer"];