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

<figure><img src="https://316941418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fu7Tp9nYI5WDjQbI6k69e%2Fuploads%2FwnbtwOe1Pwj5hSBvqMR5%2Fimage.png?alt=media&#x26;token=bc020dbc-b50b-493c-b219-e63eeff9c7cf" 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="https://316941418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fu7Tp9nYI5WDjQbI6k69e%2Fuploads%2F4qrr1XyamomH76M5JLbB%2Fimage.png?alt=media&#x26;token=8df21ddc-2062-41e8-8aa7-ed28a11aaa2e" alt=""><figcaption></figcaption></figure>

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

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

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

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

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

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

<figure><img src="https://316941418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fu7Tp9nYI5WDjQbI6k69e%2Fuploads%2Fe1T51RnAYyP0EdKoncF1%2Fimage.png?alt=media&#x26;token=821b51e9-76e7-4d49-83e3-dcb326e13e2b" 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="https://316941418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fu7Tp9nYI5WDjQbI6k69e%2Fuploads%2FuYSPiAYoiH2SVrINgPCo%2Fimage.png?alt=media&#x26;token=28ad7239-d894-4bb6-a72c-64c2b781d51b" alt=""><figcaption></figcaption></figure>

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://fkassa.gitbook.io/firekassa-api-v2/overview/security.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
