Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions ru/_includes/smartcaptcha/captcha-validation.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
{{ captcha-name }}, проверив запрос, присваивает ему идентификатор — одноразовый токен. По этому токену вы можете запросить у сервиса результат проверки запроса пользователя. Токен действителен 5 минут. По истечении этого времени токен становится недействительным и пользователю необходимо снова пройти проверку.
Рекомендуем добавлять проверку {{ captcha-name }} для действий пользователя, требующих верификации.
Например, чтобы проверить отправку формы, добавьте проверку капчи на действие отправки.

{{ captcha-name }} проверяет запрос и присваивает ему идентификатор — одноразовый токен. По этому токену вы можете запросить у сервиса результат проверки запроса пользователя. Токен действителен 5 минут. По истечении этого времени токен становится недействительным, и пользователю необходимо снова пройти проверку.

После проверки токен загружается в элемент `<input type="hidden" name="smart-token" value="<токен>" ...>` на странице пользователя. Например:

Expand All @@ -14,10 +17,17 @@
* `<div id="captcha-container" class="smart-captcha" ...>` — элемент `div` с виджетом.
* `value` — значение токена.

Чтобы узнать результат проверки, отправьте POST-запрос на адрес `https://{{ captcha-domain }}/validate`, передав параметры в формате `x-www-form-urlencoded`:
Отправьте одноразовый токен на ваш бэкенд и выполните его проверку в течение пяти минут.

```
secret=<ключ_сервера>&token=<токен>&ip=<IP-адрес_пользователя>
Чтобы узнать результат проверки, отправьте POST-запрос на адрес `https://smartcaptcha.yandexcloud.net/validate` с типом содержимого `x-www-form-urlencoded`:

```text
POST https://{{ captcha-domain }}/validate HTTP/1.1
Content-Type: application/x-www-form-urlencoded

secret=<ключ_сервера>&
token=<токен>&
ip=<IP-адрес_пользователя>
```

Где:
Expand Down
2 changes: 1 addition & 1 deletion ru/_includes/smartcaptcha/query-parameters.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
* `secret` — [ключ сервера](../../smartcaptcha/concepts/keys.md);
* `token` — одноразовый токен, полученный после прохождения проверки;
* `token` — одноразовый токен, полученный после проверки;
* `ip` — IP-адрес пользователя, с которого пришел запрос на проверку токена. Этот параметр не обязателен, однако мы просим передавать IP-адрес пользователя при запросах. Это помогает улучшить качество работы {{ captcha-name }}.
13 changes: 9 additions & 4 deletions ru/_tutorials/security/invisible-captcha-android.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@

```kotlin
val webView = findViewById<WebView>(R.id.webViewCaptcha)
webView.loadUrl("URL_страницы_с_капчей?sitekey=<ключ_клиентской_части>&invisible=true")
webView.loadUrl("URL_страницы_с_капчей?sitekey=<ключ_клиента>&invisible=true")
```

Где:
Expand Down Expand Up @@ -84,20 +84,25 @@
## Получите результат прохождения капчи {#get-result}

1. Сохраните токен прохождения капчи. Он вернется в методе `onGetToken(token: String)`, когда сервис обработает попытку.
1. Для проверки токена отправьте POST-запрос на адрес `https://{{ captcha-domain }}/validate`, передав параметры в формате `x-www-form-urlencoded`:
1. Чтобы узнать результат проверки, отправьте POST-запрос на адрес `https://{{ captcha-domain }}/validate` с типом содержимого `x-www-form-urlencoded`:

{% include [query-parameters](../../_includes/smartcaptcha/query-parameters.md) %}

{% note info %}

Данная логика должна выполняться на бэкенде. В само Android-приложение секретный ключ `secret` попасть не должен.
Данная логика должна выполняться на бэкенде. В само Android-приложение ключ сервера `secret` попасть не должен.

{% endnote %}

>Пример запроса:
>
>```text
>https://{{ captcha-domain }}/validate?secret=<ключ_сервера>&ip=<IP-адрес_пользователя>&token=<токен>
>POST https://{{ captcha-domain }}/validate HTTP/1.1
>Content-Type: application/x-www-form-urlencoded
>
> secret=<ключ_сервера>&
> token=<токен>&
> ip=<IP-адрес_пользователя>
>```

1. Получите [ответ с сервера](../../smartcaptcha/concepts/validation.md). Он содержит JSON-объект с полями `status` и `message`.
Expand Down
19 changes: 12 additions & 7 deletions ru/_tutorials/security/quickstart-android.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@

1. Создайте **WebView** и добавьте его на экран.
1. Загрузите в **WebView** URL веб-страницы с капчей.
1. Вставьте в URL [query-параметр](../../smartcaptcha/concepts/widget-methods.md#methods) `sitekey=<ключ_клиентской_части>`:
1. Вставьте в URL [query-параметр](../../smartcaptcha/concepts/widget-methods.md#methods) `sitekey=<ключ_клиента>`:

```kotlin
val webView = findViewById<WebView>(R.id.webViewCaptcha)
webView.loadUrl("URL_страницы_с_капчей?sitekey=<ключ_клиентской_части>")
webView.loadUrl("URL_страницы_с_капчей?sitekey=<ключ_клиента>")
```

1. Добавьте в **WebView** созданный JavaScript Interface. Укажите вторым параметром `NativeClient` — это имя, на которое веб-страница будет отправлять сообщения с помощью функции обратного вызова:
Expand All @@ -49,20 +49,25 @@
## Получите результат прохождения капчи {#get-result}

1. Сохраните токен прохождения капчи. Он вернется в методе `onGetToken(token: String)`, когда сервис обработает попытку.
1. Для проверки токена отправьте POST-запрос на адрес `https://{{ captcha-domain }}/validate`, передав параметры в формате `x-www-form-urlencoded`:
1. Чтобы узнать результат проверки, отправьте POST-запрос на адрес `https://{{ captcha-domain }}/validate` с типом содержимого `x-www-form-urlencoded`:

{% include [query-parameters](../../_includes/smartcaptcha/query-parameters.md) %}

{% note info %}

Данная логика должна выполняться на бэкенде. В само Android-приложение секретный ключ `secret` попасть не должен.
Данная логика должна выполняться на бэкенде. В само Android-приложение ключ сервера `secret` попасть не должен.

{% endnote %}

>Пример запроса:
>
Пример запроса:

>```text
>https://{{ captcha-domain }}/validate?secret=<ключ_сервера>&ip=<IP-адрес_пользователя>&token=<токен>
>POST https://{{ captcha-domain }}/validate HTTP/1.1
>Content-Type: application/x-www-form-urlencoded
>
> secret=<ключ_сервера>&
> token=<токен>&
> ip=<IP-адрес_пользователя>
>```

1. Получите [ответ с сервера](../../smartcaptcha/concepts/validation.md). Он содержит JSON-объект с полями `status` и `message`.
Expand Down
3 changes: 2 additions & 1 deletion ru/_tutorials/security/quickstart-ios.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@
}
```

1. После получения токена из метода `captchaDidFinish` отправьте POST-запрос на сервер для проверки `https://{{ captcha-domain }}/validate`, передав параметры в формате `x-www-form-urlencoded`:
1. Схраните токен прохождения капчи. Он вернется в методе `captchaDidFinish`, когда сервис обработает попытку.
1. Чтобы узнать результат проверки, отправьте POST-запрос на адрес `https://{{ captcha-domain }}/validate` с типом содержимого `x-www-form-urlencoded`:

{% include [query-parameters](../../_includes/smartcaptcha/query-parameters.md) %}

Expand Down
2 changes: 1 addition & 1 deletion ru/smartcaptcha/concepts/domain-validation.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

При создании капчи указывается список доменов, на которых она будет размещена. По умолчанию {{ captcha-name }} проверяет имя домена и позволяет использовать капчу только на сайтах, которые входят в этот список.

Проверку можно отключить, но это представляет большой риск для безопасности — капча может быть размещена на любом сайте, и кто угодно сможет использовать ваш [ключ](./keys.md). В этом случае выполняйте проверку самостоятельно на своем сервере. Отключение может быть полезно, когда список имен доменов очень длинный, часто меняется или неизвестен.
Проверку можно отключить, но это представляет большой риск для безопасности — капча может быть размещена на любом сайте, и кто угодно сможет использовать ваш [ключ клиента](./keys.md). В этом случае выполняйте проверку самостоятельно на своем сервере. Отключение может быть полезно, когда список имен доменов очень длинный, часто меняется или неизвестен.

Чтобы отключить проверку, при [создании](../operations/create-captcha.md) или редактировании капчи включите опцию **{{ ui-key.yacloud.smartcaptcha.label_no-hostname-check }}**.

Expand Down
8 changes: 4 additions & 4 deletions ru/smartcaptcha/concepts/invisible-captcha.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
}

window.smartCaptcha.render('captcha-container', {
sitekey: '<ключ_клиентской_части>',
sitekey: '<ключ_клиента>',
invisible: true, // Сделать капчу невидимой
callback: callback,
});
Expand Down Expand Up @@ -63,7 +63,7 @@
}

window.smartCaptcha.render('captcha-container', {
sitekey: '<ключ_клиентской_части>',
sitekey: '<ключ_клиента>',
invisible: true, // Сделать капчу невидимой
callback: callback,
});
Expand Down Expand Up @@ -93,7 +93,7 @@

```js
window.smartCaptcha.render('captcha-container', {
sitekey: '<ключ_клиентской_части>',
sitekey: '<ключ_клиента>',
invisible: true,
shieldPosition: 'top-left',
callback: callback,
Expand Down Expand Up @@ -129,7 +129,7 @@ window.smartCaptcha.render('captcha-container', {
}

widgetId = window.smartCaptcha.render('captcha-container', {
sitekey: '<ключ_клиентской_части>',
sitekey: '<ключ_клиента>',
invisible: true, // Сделать капчу невидимой
callback: callback,
});
Expand Down
12 changes: 6 additions & 6 deletions ru/smartcaptcha/concepts/keys.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,25 @@ description: Из статьи вы узнаете, что такое клиен

# Ключи капчи

При создании капчи автоматически генерируется пара ключей: клиентский и серверный. Эти ключи генерируются один раз при создании капчи и никогда не меняются.
При создании капчи автоматически генерируется пара ключей: клиента и сервера. Эти ключи генерируются один раз при создании капчи и никогда не меняются.

Клиентский ключ (`client_key`) используется для [добавления виджета](./widget-methods.md) {{ captcha-name }} на сайт. Он является публичным и указывается на той странице, где размещен виджет.
**{{ ui-key.yacloud.smartcaptcha.label_client-key }}** (`client_key`) используется для [добавления виджета](./widget-methods.md) {{ captcha-name }} на сайт. Он является публичным и указывается на той странице, где размещен виджет.

Серверный ключ (`server_key`) используется бэкендом сайта, чтобы получить [результат проверки](./validation.md#validation-result) запроса пользователя. Серверный ключ — приватный, поэтому храните его в надежном месте. Например, вы можете использовать для этого сервис [{{ lockbox-full-name }}](../../lockbox/).
**{{ ui-key.yacloud.smartcaptcha.label_server-key }}** (`server_key`) используется бэкендом сайта, чтобы получить [результат проверки](./validation.md#validation-result) запроса пользователя. Ключ сервера — приватный, поэтому храните его в надежном месте. Например, вы можете использовать для этого сервис [{{ lockbox-full-name }}](../../lockbox/).

Одноразовый токен (идентификатор запроса) автоматически генерируется сервисом {{ captcha-name }} и используется при получении [результата проверки](validation.md#validation-result) запроса пользователя. Токен действителен пять минут.

{% note warning %}

Никогда не пересылайте серверный ключ {{ captcha-name }}, не храните его в незашифрованном виде и не допускайте, чтобы он попал в открытый доступ. Если ключ все-таки оказался в открытом доступе, [создайте новую капчу](../operations/create-captcha.md) и замените ей старую.
Никогда не пересылайте ключ сервера {{ captcha-name }}. Храните его в надежном месте. Если ключ стал известен третьим лицам, [создайте](../operations/create-captcha.md) новую капчу на смену старой.

{% endnote %}

Подробнее о том, как получить клиентский и серверный ключи, см. в разделе [{#T}](../operations/get-keys.md).
Подробнее о том, как получить ключи клиента и сервера, см. в разделе [{#T}](../operations/get-keys.md).

## Формат ключей {#key-format}

Клиентский ключ всегда имеет префикс `ysc1_`, серверный — `ysc2_`. Следующие 20 символов у них совпадают.
Ключ клиента всегда имеет префикс `ysc1_`, ключ сервера — `ysc2_`. Следующие 20 символов у них совпадают.

Примеры ключей:

Expand Down
12 changes: 6 additions & 6 deletions ru/smartcaptcha/concepts/widget-methods.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ description: Вы можете подключить виджет {{ captcha-name
```html
<div
class="smart-captcha"
data-sitekey="<ключ_клиентской_части>"
data-sitekey="<ключ_клиента>"
data-hl="<язык>"
></div>
```
Expand Down Expand Up @@ -74,8 +74,8 @@ description: Вы можете подключить виджет {{ captcha-name
<div
id="captcha-container"
class="smart-captcha"
data-sitekey="<ключ_клиентской_части>"
data-hl="en"
data-sitekey="<ключ_клиента>"
data-hl="<язык>"
data-callback="callback"
></div>
<input type="submit" value="Submit" />
Expand Down Expand Up @@ -109,7 +109,7 @@ description: Вы можете подключить виджет {{ captcha-name
const container = document.getElementById('<идентификатор_контейнера>');

const widgetId = window.smartCaptcha.render(container, {
sitekey: '<ключ_клиентской_части>',
sitekey: '<ключ_клиента>',
hl: '<язык>',
});
}
Expand Down Expand Up @@ -147,7 +147,7 @@ description: Вы можете подключить виджет {{ captcha-name

* `container` — контейнер для виджета. Можно передать DOM-элемент или идентификатор контейнера.
* `params` — объект с параметрами для капчи:
* `sitekey` — [ключ клиентской части](./keys.md).
* `sitekey` — [ключ клиента](./keys.md).
* `callback` — функция-обработчик.
* `hl` — язык виджета.
* `test` — включение работы капчи в режиме тестирования. Пользователь всегда будет получать задание. Используйте это свойство только для отладки и тестирования.
Expand Down Expand Up @@ -306,7 +306,7 @@ description: Вы можете подключить виджет {{ captcha-name
}

window.smartCaptcha.render('captcha-container', {
sitekey: '<ключ_клиентской_части>',
sitekey: '<ключ_клиента>',
callback: callback,
});
}
Expand Down
2 changes: 1 addition & 1 deletion ru/smartcaptcha/operations/advanced-method.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ description: Следуя данной инструкции, вы сможете
Где:

* `<идентификатор_контейнера>` — идентификатор, сгенерированный на предыдущем шаге;
* `sitekey` — [ключ клиентской части](../concepts/keys.md);
* `sitekey` — [ключ клиента](../concepts/keys.md);
* `hl` — [язык](../concepts/widget-methods.md#render) виджета и задания.

В код callback-функции стоит добавить проверку существования объекта `window.smartCaptcha`, чтобы не вызвать ошибку в случае вызова функции до завершения загрузки JS-скрипта.
Expand Down
Loading