> For the complete documentation index, see [llms.txt](https://fkassa.gitbook.io/firekassa-api-v2/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://fkassa.gitbook.io/firekassa-api-v2/overview/security.md).

# Безопасность

<figure><img src="/files/xO8IEQpT1stmXKoQaM1B" alt=""><figcaption></figcaption></figure>

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

## 1. Обязательное использование SSL

Если вы не пользуетесь SSL, то весь трафик идет через сеть открытым текстом и потому может быть перехвачен злоумышленником. Чтобы избежать этой утечки, нужно обязательно использовать http**s**, а не http.&#x20;

Однако что более важно - обязательная проверка сертификата. С помощью атаки Man-In-The-Middle, мошенники могут попытаться перехватить ваш трафик. Это невозможно, если стоит проверка сертификата. Однако если ваш разработчик установит игнорирование проблем с сертификатом, то ваш трафик может оказаться под угрозой компроментации

## 2. Токен авторизации

Все запросы по API должны содержать токен авторизации, который идентифицирует вас как клиента и дает права на выполнение тех операций, которые вам доступны.

Токен авторизации указывается в виде bearer-значения для заголовка Authorization, вот пример:

{% tabs %}
{% tab title="CURL" %}

```sh
curl --request POST \
  --url https://admin.vanilapay.com/api/v2/deposit \
  --header 'Authorization: Bearer ****' \
...
```

{% endtab %}

{% tab title="PHP + Guzzle" %}

```php
$httpClient = new \GuzzleHttp\Client();
$response = $httpClient->post('https://{{your_api_domain}}/api/v2/deposit', [
    'headers' => [
        'Authorization' => 'Bearer ' . $yourApiToken,
    ]
]);
```

{% endtab %}
{% endtabs %}

Если токен указан не корректно или сайт еще не активирован, то вы получите ошибку HTTP 401 Unauthorized.

Токен авторизации индивидуален для каждого сайта и его можно увидеть\изменить именно в карточке сайта, на вкладке API.

<figure><img src="/files/Rj6o6pOjG9pFuqhBi2Al" alt=""><figcaption></figcaption></figure>

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

**Внимание!!!** Если токен указан некорректно, все запросы к апи будут возвращать ошибку HTTP 401 с телом ответа

```
{ “error”: ”Сайт не найден” }
```

## 3. Подпись запросов

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

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

<figure><img src="/files/5sbJXVAMYe5rfkxKohOx" alt=""><figcaption></figcaption></figure>

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

Для формирования подписи требуется

* создать строку из пути запроса ( начинается с /api/ ) и тела запроса ( если имеется )
* обработать полученную строку с помощью HMAC с алгоритмом SHA512 и токеном для подписи запроса в качестве секрета для этого алгоритма
* указать полученное значение в заголовке Signature

Пример формирования подписи

{% tabs %}
{% tab title="PHP" %}

```php
#example with body
$body = '{"method": "wallet", "amount": "50.00", "order_id": "12345"}';
$signature = hash_hmac('sha512', '/api/v2/deposit' . $body, 'your_key');

#example with query params and without body
$signature = hash_hmac('sha512', '/api/v2/transactions?sort=id', 'your_key');
```

{% endtab %}

{% tab title="Python" %}

```python
import hmac
import hashlib

#example with body
body = '{"method": "wallet", "amount": "50.00", "order_id": "12345"}'.encode('utf-8')
signature = hmac.new('your_key'.encode('utf-8'), '/api/v2/deposit'.encode('utf-8') + body, hashlib.sha512).hexdigest()

#example with query params and without body
signature = hmac.new('your_key'.encode('utf-8'), '/api/v2/transactions?sort=id'.encode('utf-8'), hashlib.sha512).hexdigest()
```

{% endtab %}
{% endtabs %}

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

{% tabs %}
{% tab title="CURL" %}

```sh
curl --request POST \
  --url https://admin.vanilapay.com/api/v2/deposit \
  --header 'Authorization: Bearer ****' \
  --header 'Signature: 1234567890' \
  --header 'Content-Type: application/json' \
...
```

{% endtab %}

{% tab title="PHP + Guzzle" %}

```php
$httpClient = new \GuzzleHttp\Client();
$response = $httpClient->post('https://{{your_api_domain}}/api/v2/deposit', [
    'headers' => [
        'Authorization' => 'Bearer ' . $yourApiToken,
        'Signature' => '1234567890',
    ]
]);
```

{% endtab %}
{% endtabs %}

## 4. Белый список айпи для доступа к API

Дополнительной опцией по безопасности является настройка белого списка айпи для доступа к API. Ранее у нас был такой список только на выводы, но в текущей версии API у нас есть отдельный список, который работает на все запросы к апи.

Настраивается этот список в карточке сайта, в разделе API

<figure><img src="/files/obNGD7MWD7THZmatT0gA" alt=""><figcaption></figcaption></figure>

**Внимание!!!** Если запрос прийдет с айпи, которого нет в списке, в ответ будет возвращаться ошибка HTTP 401 с телом ответа

```
{ “error”: ”Сайт не найден” }
```
