CAPTCHA#

Для отображения сервиса CAPTCHA при входе по логину и паролю необходимо внести изменения в конфигурационный файл, а также загрузить необходимые файлы (CSS и JS).

Изменения конфигурационного файла должны быть произведены:

  • в блоке настроек blitz.prod.local.idp.captcha. Пример записи настройки приведен ниже:

"captcha" : {
    "exampleCaptcha": {
        "operations": [
            {
                "call": {
                    "headers": [
                        "accept:application/json",
                        "Authorization:Bearer ${cfg.bearerToken}"
                    ],
                    "method": "post",
                    "url": "https://captcha.example.com/captcha/1.0.0/check?uniqueFormHash=${ste.uniqueFormHash}&code=${ocp.code}&options[system]=${cfg.system}&options[token]=${cfg.token}"
                },
                "check": {
                    "errRegExp": {},
                    "okRegExp": {
                        "error": "0"
                    }
                },
                "name": "check",
                "newState": {
                    "uniqueFormHash": "${rsp.result.uniqueFormHash-}"
                }
            },
            {
                "call": {
                    "headers": [
                        "accept:application/json",
                        "Authorization:Bearer ${cfg.bearerToken}"
                    ],
                    "method": "get",
                    "url": "https://captcha.example.com/captcha/1.0.0/create?type=${cfg.type}&options[system]=${cfg.system}&options[token]=${cfg.token}"
                },
                "name": "create",
                "newState": {
                    "uniqueFormHash": "${rsp.result.uniqueFormHash-}"
                }
            },
            {
                "call": {
                    "headers": [
                        "accept:application/json",
                        "Authorization:Bearer ${cfg.bearerToken}"
                    ],
                    "method": "post",
                    "url": "https://captcha.example.com/captcha/1.0.0/refresh?uniqueFormHash=${ste.uniqueFormHash}&type=${cfg.type}&options[system]=${cfg.system}&options[token]=${cfg.token}"
                },
                "name": "refresh"
            }
        ],
        "plainParams": {
            "type": "arithmetic"
        },
        "secureParams": {
            "bearerToken": "<access_token>",
            "system": "<system_id>",
            "token": "<system_token>"
        }
    }
}

В этом блоке содержатся параметры вызова трех методов сервиса CAPTCHA (create, check, refresh), а также секретные параметры – маркер доступа (bearerToken), идентификатор системы (system), а также токен системы (token).

  • в блоке настроек входа по логину и паролю blitz.prod.local.idp.password. Внутри этого блока следует добавить блок captcha и настроить согласно примеру:

"captcha" : {
  "enabled": true,
  "initJs": "require(['https://demo.reaxoft.ru/themes/default/assets/js/passwordCaptcha.js', 'captcha-conf'], function(captcha, conf){ captcha(conf, 'https://demo.reaxoft.ru/themes/default/assets/css/passwordCaptcha.css');});",
  "mode": {
    "type": "always_on"
  },
  "name": "exampleCaptcha"
}

В этом блоке следует настроить следующие параметры:

  • enabled – признак того, включена CAPTCHA или нет (true/false);

  • initJs – содержит ссылки на JS-скрипт и CSS-стили, загружаемые на странице входа и необходимые для отображения/вызова CAPTCHA на странице входа;

  • mode – режим отображения CAPTCHA, предусмотрены следующие режимы:

    • always_on – CAPTCHA отображается всегда;

    • on_header – CAPTCHA отображается, если в запросе есть заголовок, указанный в параметре name, и значением, указанном в параметре value.

    • by_brute_force_protection – CAPTCHA отображается, если Blitz Identity Provider обнаружил подбор пароля к конкретной учетной записи или массовый подбор пароля ко всем учетным записям.

При использовании режима by_brute_force_protection требуется дополнительно создать в блоке blitz.prod.local.idp.password блок настроек bruteForceProtection со следуюшими настройками:

  • disabled – выключена или нет защита (true/false);

  • captcha – использовать ли тест CAPTCHA при срабатывании защиты (true/false);

  • delay – время задержки входа в секундах (применяется, если выключено использование CAPTCHA);

  • блок system в настройке thresholds – если необходима защита на уровне системы (защита от перебора на разные логины). Задаются настройки:

    • minAttemptsToActivate – минимальное кол-во прошедших входов для включения механизма защиты на основе статистики системы (по умолчанию 100 входов);

    • timeWindowInMin – временное окно сбора статистики по соотношению успешных и неуспешных входов в минутах, должно быть четным (по умолчанию 100 минут);

    • failedAttemptsPercent, настройка turnOff – порог выключения автоматической защиты, в процентах;

    • failedAttemptsPercent, настройка turnOn – порог включения автоматической защиты, в процентах.

    • forced – включить принудительно защиту для всех (true/false).

  • блок system в настройке thresholds – если необходима защита на уровне отдельных пользователей (защита от подбора пароля на конкретного пользователя). Задаются настройки:

    • ttlInSec – период, за который накапливается счетчик неуспешных входов по пользователю в секундах (по умолчанию 3600 секунд);

    • failedAttempts, настройка turnOn – количество ошибочных входов за период, после которого для учетной записи включится защита.

Пример настроек блока bruteForceProtection (включена только защита на уровне пользователя):

"bruteForceProtection" : {
    "delay" : 0,
    "captcha" : true,
    "disabled" : false,
    "thresholds" : {
        "user" : {
            "failedAttempts" : {
                "turnOn" : 5
            },
            "ttlInSec" : 3600
        }
    }
}

Пример настроек bruteForceProtection (включена защита на уровне пользователя и на уровне системы):

"bruteForceProtection" : {
    "disabled": false,
    "delay" : 0,
    "captcha" : true,
    "thresholds" : {
        "system" : {
            "minAttemptsToActivate": 1000,
            "timeWindowInMin": 180,
            "failedAttemptsPercent" : {
                "turnOff" : 20,
                "turnOn" : 30
            },
            "forced" : false
        },
        "user" : {
            "ttlInSec": 3600,
            "failedAttempts" : {
                "turnOn" : 5
            }
        }
    }
}

В случае использования в качестве CAPTCHA сервиса Google reCAPTCHA v3 необходимо:

  • задать следующие настройки в blitz.prod.local.idp.captcha:

"captcha" : {
  "reCAPTCHAv3" : {
    "operations" : [
      {
        "call" : {
          "headers" : [],
          "method" : "post",
          "url" : "https://www.google.com/recaptcha/api/siteverify?secret=${cfg.secret}&response=${ocp.response}"
        },
        "check" : {
          "errRegExp" : {},
          "okRegExp" : {
            "score" : "1\\.0|0\\.(5|6|7|8|9)",
            "success" : "true"
          }
        },
        "name" : "verify"
      }
    ],
    "plainParams" : {
      "sitekey" : "SITE_KEY"
    },
    "secureParams" : {
      "secret" : "SITE_SECRET"
    }
  }
}

Вместо SITE_KEY и SITE_SECRET нужно заполнить значения, полученные при регистрации Google reCAPTCHA v3 на сайте https://g.co/recaptcha/v3. Также нужно скорректировать значение в параметре score – установить требуемый порог успешного прохождения проверки (в примере выставлен порог не ниже 0,5).

  • задать следующие настройки в blitz.prod.local.idp.password.captcha:

"captcha" : {
  "mode" : {
    "_name" : "X-Captcha-Check",
    "_value" : "true",
    "_type" : "on_header",
    "type" : "always_on"
  },
  "enabled" : true,
  "initJs" : "require(['/blitz/assets/blitz-common/javascripts/recaptcha_v3.js', 'captcha-conf'], function(captcha, conf){ captcha(conf);});",
  "name" : "reCAPTCHAv3"
}

Для добавления CAPTCHA на страницу подтверждения привязки учетной записи пользователя к учетной записи из внешнего поставщика идентификации необходимо задать следующие настройки в blitz.prod.local.idp.externalIdps.captcha:

"captcha" : {
  "mode" : {
    "_name" : "X-Captcha-Check",
    "_value" : "true",
    "_type" : "on_header",
    "type" : "always_on"
  },
  "enabled" : true,
  "initJs" : "require(['/blitz/assets/blitz-common/javascripts/recaptcha_v3.js', 'captcha-conf'], function(captcha, conf){ captcha(conf);});",
  "name" : "reCAPTCHAv3"
}

Для добавления CAPTCHA на страницу регистрации пользователей необходимо задать следующие настройки в blitz.prod.local.idp.provisioning.registration.captcha:

"captcha" : {
  "mode" : {
    "_name" : "X-Captcha-Check",
    "_value" : "true",
    "_type" : "on_header",
    "type" : "always_on"
  },
  "enabled" : true,
  "initJs" : "require(['/blitz/assets/blitz-common/javascripts/recaptcha_v3.js', 'captcha-conf'], function(captcha, conf){ captcha(conf);});",
  "name" : "reCAPTCHAv3"
}

Для добавления CAPTCHA на страницу восстановления пароля необходимо задать следующие настройки в blitz.prod.local.idp.provisioning.recovery.captcha:

"captcha" : {
  "mode" : {
    "_name" : "X-Captcha-Check",
    "_value" : "true",
    "_type" : "on_header",
    "type" : "always_on"
  },
  "enabled" : true,
  "initJs" : "require(['/blitz/assets/blitz-common/javascripts/recaptcha_v3.js', 'captcha-conf'], function(captcha, conf){ captcha(conf);});",
  "name" : "reCAPTCHAv3"
}