---
metadata:
  - name: generator
    content: Diplodoc Platform v5.39.6
alternate:
  - https://yandex.com/dev/commercial/doc/en/concepts/limit.md
  - https://yandex.com/dev/commercial/doc/ru/concepts/limit.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/dev/commercial/doc/ru/llms.txt

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

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

{% note info %}

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

{% endnote %}

## Какие ограничения можно использовать {#what-limits}

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

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

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

Чтобы прописать разрешенные домены и IP-адреса для вашего API-ключа:
- Зайдите в [Кабинет разработчика](https://developer.tech.yandex.ru/).
- Выберите нужный вам ключ и нажмите **Изменить**.
- Укажите список IP-адресов, с которых можно делать запросы, по одному адресу в строке. Поддерживаются как IPv4, так и IPv6 адреса, а также подсети. Например, можно указать адреса следующим образом:

    ```
    192.0.2.0
    192.0.2.0/24
    2001:db8::/32
    ```
    
    {% note info %}
    
    При загрузке карты используется IP-адрес устройства пользователя. При работе с JSAPI мы рекомендуем использовать ограничение по домену.
    
    {% endnote %}
    
- Укажите список доменов, с которых можно делать запросы. Информация о доменах передается в заголовке `Referer`. Домены указываются по одному в строке, без указания порта, URL-схемы и параметров. В качестве значения в заголовке `Referer` указывается URL (например, `https://www.yandex.ru`). Все поддомены автоматически добавляются в список разрешенных. Например, можно указать домены следующим образом:

    ```
    https://www.yandex.ru
    https://www.yandex.com
    https://www.example.com
    ```

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

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

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

<!--example>
            <title>Пример проверки ограничений</title>
            <dl>
                <dlentry>
                    <dt/>
                    <dd>
                        <p><b>Указанные ограничения по IP-адресам</b></p>
                        <codeblock>198.51.100.0
192.0.2.0/24</codeblock>
                        <p><b>Указанные ограничения по HTTP Referer</b></p>
                        <codeblock>yandex.ru
maps.yandex.ru</codeblock>
                        <p><b>Примеры валидных запросов</b></p>
                        <p>
                            <ul id="ul_dqt_k3l_kkb">
                                <li>Запросы с IP-адреса <codeph>198.51.100.0</codeph>, в заголовке
                                    Referer которых указан домен <codeph>yandex.ru</codeph>;</li>
                                <li>Запросы с IP-адреса <codeph>198.51.100.0</codeph>, в заголовке
                                    Referer которых указан домен
                                    <codeph>maps.yandex.ru</codeph>;</li>
                                <li>Запросы из подсети с IP-адресом <codeph>192.0.2.0/24</codeph>, в
                                    заголовке Referer которых указан домен
                                        <codeph>yandex.ru</codeph>;</li>
                                <li>Запросы из подсети с IP-адресом <codeph>192.0.2.0/24</codeph>, в
                                    заголовке Referer которых указан домен
                                        <codeph>maps.yandex.ru</codeph>;</li>
                            </ul>
                        </p>
                        <p><b>Примеры невалидных запросов</b></p>
                        <p>
                            <ul id="ul_arl_53l_kkb">
                                <li>Запросы с IP-адреса <codeph>192.0.2.<b>5</b></codeph> с пустым
                                    заголовком Referer;</li>
                                <li>Запросы с IP-адреса <codeph>192.0.2.<b>5</b></codeph>, в
                                    заголовке Referer которых указан домен
                                        <codeph>yandex.<b>com</b></codeph>;</li>
                            </ul>
                        </p>
                    </dd>
                </dlentry>
            </dl>
        </example-->

## Как отобразить карту в контейнере {#container}

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

{% cut "iframe" %}

Современные браузеры передают адрес загруженной в элементе iframe страницы. Достаточно указать домен страницы с картой в [Кабинете разработчика](https://developer.tech.yandex.ru/).

{% endcut %}

{% cut "Android webView" %}

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

```java
// Сайт, который будет загружен в 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);               
```

{% endcut %}

{% cut "iOS UIWebView" %}

При использовании UIWebView на iOS устройствах необходимо указать заголовок Referer в запросе, отправленном UIWebView. Для этого используется метод [- setValue:forHTTPHeaderField:](https://developer.apple.com/documentation/foundation/nsmutableurlrequest#//apple_ref/occ/instm/NSMutableURLRequest/setValue%3aforHTTPHeaderField%3a). Например, можно указать его следующим образом:

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

{% endcut %}

## Инструкция по настройке подписи запросов к API Яндекс Карт {#signature}

С инструкцией по настройке подписи запросов к API Яндекс Карт можно ознакомиться на нашем [сайте]( https://yandex.ru/maps-api/docs/common/security/signature_usage.html).
