Проверка reCAPTCHA от Google на стороне HTTP-Сервиса

Код проверяет переданный токен reCAPTCHA от Google при вызове HTTP-Сервиса.
Таким образом проверяем, отправил ли данные на наш HTTP-Сервис робот или реальный пользователь.

Если у Вас возникла необходимость реализовать HTTP-сервис c проверкой на робота при отправке. Т.е. чтобы в Вашем сервисе была реализована проверка на робота и он был менее подвержен DDOS атакам, можно воспользоваться сервисом от Google под названием "reCAPCTHA".

Подробное описание сервиса можно найти по ссылке: https://developers.google.com/recaptcha

Для его работы необходимо пройти регистрацию и получить секретные ключи клиентский и серверный.

Клиентский должен быть размещен в веб-форме, которая будет отправлять запрос к Вашему HTTP-Сервису (инструкция как разместить проверку на форме есть в описании по ссылке выше). А серверный, соответственно, необходимо использовать на стороне HTTP-Сервиса, при получении подтверждения от API Google, что пользователь отправивший данные на HTTP-Сервис является человеком, а не роботом.

API Google возвращает ответ в формате JSON, который можно легко разобрать на стороне 1С и получить подтверждение или отказ в том, что отправитель данных настоящий живой человек.

Ниже представлен пример кода, вызываемый при обработке полученного запроса HTTP-Сервисом.

Функция v1_RPCCreateRequest(Запрос)

//Получаем из заголовков запроса токен, который передала веб-форма
g_recaptcha_response = Запрос.Заголовки.Получить("g-recaptcha-response");
Если g_recaptcha_response = Неопределено Тогда
Ответ = Новый HTTPСервисОтвет(400);
Возврат Ответ;
КонецЕсли;

//Формируем HTTP-Соединение
АдресСервераОнлайнПроверки = "www.google.com";
secret = "#####################"; //Это ваш серверный секретный ключ, полученный при регистрации капчи в гугле.
РесурсНаСервере = "/recaptcha/api/siteverify?secret="+ secret +"&response="+g_recaptcha_response;
Попытка
ssl = Новый ЗащищенноеСоединениеOpenSSL;
Соединение = Новый HTTPСоединение(АдресСервераОнлайнПроверки,,,,,,ssl);
Исключение
Сообщить("Не удалось установить соединение с сервером онлайн-проверки:"
+ Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
Ответ = Новый HTTPСервисОтвет(400);
Ответ.УстановитьТелоИзСтроки("Невозможно выполнить проверку ReCaptcha");
Возврат Ответ;
КонецПопытки;

// посылаем запрос

Попытка
HTTPЗапрос = Новый HTTPЗапрос(РесурсНаСервере);
Результат  = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
Соединение = Неопределено;

Если Результат.КодСостояния <> 200 Тогда
Ответ = Новый HTTPСервисОтвет(400);
Ответ.УстановитьТелоИзСтроки("Невозможно выполнить проверку ReCaptcha");
Возврат Ответ;
КонецЕсли;

//Анализирует результат ответа от Google
ТелоЗапроса = Результат.ПолучитьТелоКакСтроку();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
СтруктураДанных = ПрочитатьJSON(ЧтениеJSON);

Если Не СтруктураДанных.success Тогда
Ответ = Новый HTTPСервисОтвет(400);
Ответ.УстановитьТелоИзСтроки("Невозможно выполнить проверку ReCaptcha");
Возврат Ответ;
КонецЕсли;
Исключение
//Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
КонецПопытки;

Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки("Данные успешно загружены");
ОбработатьЗапрос(Запрос, Ответ);

Возврат Ответ;
КонецФункции

 

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *