Защита от роботов — Yandex SmartCaptcha. Политика обработки данных
Captcha
Проверка «я не бот» для формы сайта. Обёртка: рисует виджет сервиса над своим ребёнком и выпускает форму только с токеном на руках.
Тип:
wrapper
Только веб:
в приложении элемент рисует ребёнка,
verify
ничего не делает: установленное приложение — не анонимная форма.
State @message:"" @proof:""
HttpData url:"https://api.example.com/v1/complaints" method:"POST"
immediate:false watch:false refresh:@send
body:{jsonEncode(mapOf("message", message, "captchaToken", proof))}
Captcha token:@fresh failed:@down verify:@checkHuman
onVerified:(){proof = fresh; send()}
Column
ElevatedButton onPressed:(){checkHuman()}
Text "Отправить"
Text "Напишите нам на почту." if:$down
Параметры
| Параметр | Тип | Описание |
|---|---|---|
token
|
выход, string | Токен для запроса. Пуст, пока проверка не пройдена, и снова пуст, когда истёк |
failed
|
выход, bool |
true
, когда сервис недоступен или не объявлен в
project.json
|
verify
|
выход, функция |
Её зовёт кнопка формы. Запускает проверку; запрос уходит из
onVerified
|
onVerified
|
колбэк | Выполняется, когда токен есть: положить его туда, откуда его читает запрос, и отправить |
Сервис и ключ в разметке не пишутся — они объявлены в `settings.captcha` .
Как это работает
-
Кнопка зовёт проверку, а не отправку.
verifyзапускает проверку,onVerifiedсрабатывает только с токеном. Видимый виджет, который посетитель уже отметил, отправляет сразу; не отмеченный — как только отметит. -
Отправляет нажатие, а не галочка.
Токен, полученный до нажатия, просто ложится в
token. -
Токен одноразовый и живёт недолго.
Следующий
verifyпосле отправки сам сбрасывает виджет и ждёт нового токена; истёкший токен пустеет. - Токен проверяет сервер , которому форма шлёт данные, — своим серверным ключом. Куда положить токен (тело, заголовок, имя поля), решает разметка, потому что это требование бэкенда.
- Вид виджета подбирается сам. Ширина — не больше 400 px, тема — по фону, на котором он стоит: на тёмной странице виджет тёмный. В разметке для этого писать нечего.
Правила
-
MUST
Кнопка и всё, что читает выходы, — ВНУТРИ
Captcha: сосед элемента его выходов не видит, и обработчик кнопки молча не сработает. -
MUST
Запрос (
HttpData) — СНАРУЖИ, выше элемента: колбэк видит то, что объявлено выше. Тело запроса при этом не видит выходов внутри, поэтому токен переносится в переменную страницы (proof = fresh). - MUST Сервер обязан проверять токен. Токен, который никто не проверяет, ни от чего не защищает.
-
MUST NOT
Серверный ключ в
project.jsonне кладётся. -
SHOULD
Покажите запасной путь по
failed: без токена форма не уходит никогда, и человеку нужен другой способ связаться.
See also
- Session — вход посетителя; форма регистрации — первый кандидат на капчу
- Script — авторский JavaScript на странице
- project.json — объявление сервиса