[Документация Yandex Cloud](../../index.md) > [Yandex Smart Web Security](../index.md) > [Концепции](index.md) > Условия

# Условия

{% note info %}

Функциональность списков адресов находится на стадии [Preview](../../overview/concepts/launch-stages.md).

{% endnote %}

Условия определяют, к каким HTTP-запросам применяется [правило](rules.md) Smart Web Security. В таблице для каждого условия указаны варианты сопоставления и формат значения. Если поддерживается несколько значений, указан логический оператор.

#|
|| **Тип и виды сопоставления** {width=50%} | **Значения и пример** ||
|| `IP`

* Совпадает или принадлежит диапазону
* Не совпадает и не принадлежит диапазону
* IP принадлежит региону
* IP не принадлежит региону
* IP принадлежит списку
* IP не принадлежит списку
* IP принадлежит ASN
* IP не принадлежит ASN
* IP принадлежит списку ASN
* IP не принадлежит списку ASN
|
* IP-адрес: `1.2.33.44`
* [CIDR](https://ru.wikipedia.org/wiki/Бесклассовая_адресация): `2001:0db8:85a3:0000:0000:8a2e:0370:7334`
* [CIDR](https://ru.wikipedia.org/wiki/Бесклассовая_адресация): `10::1234:1abc:1/64`
* Диапазон адресов: `1.2.0.0-1.2.1.1`
* Двухбуквенный код страны по [ISO 3166-1 alpha-2](https://ru.wikipedia.org/wiki/ISO_3166-1_alpha-2): `ru`, `kz`
* Значение [ASN](https://wikipedia.org/wiki/Autonomous_system_(Internet)) в виде целого числа без префикса `as`: `12345` ||
|| `HTTP header`

* Совпадает с
* Не совпадает с
* Начинается с
* Не начинается с
* Соответствует регулярному выражению
* Не соответствует регулярному выражению
* Принадлежит списку
* Не принадлежит списку
* Принадлежит списку регулярных выражений
* Не принадлежит списку регулярных выражений
|
Формат `ключ: значение`, где ключ — HTTP-заголовок, значение — конкретное значение заголовка, префикс значения или [регулярное выражение](https://ru.wikipedia.org/wiki/Регулярные_выражения) библиотеки [PIRE](https://github.com/yandex/pire): `User-Agent: curl/7.55.1`

Логический оператор: _и_ ||
|| `Request URI`

* Совпадает с
* Не совпадает с
* Начинается с
* Не начинается с
* Соответствует регулярному выражению
* Не соответствует регулярному выражению
* Принадлежит списку
* Не принадлежит списку
* Принадлежит списку регулярных выражений
* Не принадлежит списку регулярных выражений
|
Путь запроса, начало пути запроса или регулярное выражение библиотеки PIRE: `/` ||
|| `Query Match`

* Совпадает с
* Не совпадает с
* Начинается с
* Не начинается с
* Соответствует регулярному выражению
* Не соответствует регулярному выражению
* Принадлежит списку
* Не принадлежит списку
* Принадлежит списку регулярных выражений
* Не принадлежит списку регулярных выражений
| Формат `ключ: значение`, где ключ — параметр запроса, значение — конкретное значение параметра, префикс значения или регулярное выражение библиотеки PIRE: `a: 1`, `A: 2`

Логический оператор: _и_ ||
|| `Host`

* Совпадает с
* Не совпадает с
* Начинается с
* Не начинается с
* Соответствует регулярному выражению
* Не соответствует регулярному выражению
* Принадлежит списку
* Не принадлежит списку
* Принадлежит списку регулярных выражений
* Не принадлежит списку регулярных выражений
|
Значения заголовка `Host` для HTTP/1.1 или псевдозаголовка `authority` для HTTP/2, по которому выбирается виртуальный хост, префикс значения или регулярное выражение библиотеки PIRE: `example.com` ||
|| `HTTP method`

* Совпадает с
* Не совпадает с
* Начинается с
* Не начинается с
* Соответствует регулярному выражению
* Не соответствует регулярному выражению
* Принадлежит списку
* Не принадлежит списку
* Принадлежит списку регулярных выражений
* Не принадлежит списку регулярных выражений
| [Метод HTTP-запроса](https://ru.wikipedia.org/wiki/HTTP#Методы) в верхнем регистре, допускается произвольное значение, префикс значения или регулярное выражение библиотеки PIRE: `GET`, `POST`, `DELETE` ||

|| `Cookie`

* Совпадает с
* Не совпадает с
* Начинается с
* Не начинается с
* Соответствует регулярному выражению
* Не соответствует регулярному выражению
* Принадлежит списку
* Не принадлежит списку
* Принадлежит списку регулярных выражений
* Не принадлежит списку регулярных выражений
|
Формат `ключ: значение`, где ключ — заголовок Cookie, значение — конкретное значение Cookie, префикс значения или регулярное выражение библиотеки PIRE: `csrftoken=u32t4o3tb`

Логический оператор: _и_ ||


|| `Bot name`

* Принадлежит списку
* Не принадлежит списку
|
Список имен легитимных ботов, принадлежащих различным компаниям и сервисам: `YandexBot`, `SEMrushBot` ||
|| `Bot category`

* Принадлежит списку
* Не принадлежит списку
|
Список ботов определенной категории: `AccessibilityBot`, `SearchEngineCrawlerBot` ||
|| `Verified bot`

* Да
* Нет
| Является ли данный бот проверенным и одобренным: `Да`, `Нет` ||
|| `Bot score` |
Значение или диапазон значений рейтинга от `0` до `100` с операторами `>=`, `<=`, `=`, `!=`.

Рамки значений: 
* `не более 20` — человек;
* `20–40` — вероятно человек;
* `40–60` — не определено;
* `60–80` — вероятно бот;
* `более 80` — бот.

Логический оператор: _и_ ||
|| `FingerPrint`

* Совпадает с
* Не совпадает с
* Начинается с
* Не начинается с
* Соответствует регулярному выражению
* Не соответствует регулярному выражению
* Принадлежит списку
* Не принадлежит списку
* Принадлежит списку регулярных выражений
* Не принадлежит списку регулярных выражений
| [Отпечаток](botes.md#fingerprint) SSL/TLS‑соединения по методу [JA3](https://github.com/salesforce/ja3) или [JA4](https://github.com/FoxIO-LLC/ja4). Формируется на основе версии TLS, наборов шифров, расширений, алгоритмов подписи и других параметров:
* `6734f37431670b3ab4292b8f60f29984` (JA3 отпечаток TrickBot);
* `4d7a28d6f2263ed61de88ca66eb011e3` (JA3 отпечаток Emotet);
* `t13d3812h2_8a4b5c6d_7e8f9a0b` (формат JA4). ||
|#

## Формат регулярных выражений {#regular-expressions}

Регулярные выражения можно использовать в условиях, для которых доступны типы сопоставлений:

* Соответствует регулярному выражению
* Не соответствует регулярному выражению
* Соответствует списку регулярных выражений
* Не соответствует списку регулярных выражений

К таким условиям относятся: `HTTP header`, `Request URI`, `Query Match`, `Host`, `HTTP method`, `Cookie`.

### Группы операторов для регулярных выражений {#regular-expressions-operators}

* Квантификаторы. Определяют количество допустимых повторений элемента.

  * `*` — ноль или более вхождений любых символов, `a*` — ноль или более вхождений символа `a`,`a*b` — любое вхождение символа `a` перед символом `b`.

    Пример: `a*` — пустая строка, `a`, `aa`, `aaa` и так далее.

  * `а+` — одно или более вхождений символа `a`.

    Пример: `a+` — `a`, `aa`, `aaa` и так далее.

  * `a?` — ноль или одно вхождение символа `a`.
    
    Пример: `https?://` — соответствует `http://` и `https://`

  * `{n}` — n вхождений. Пример: `a{3}` — `aaa`.

  * `{n,m}` — от n до m вхождений. Пример: `a{3,5}` — `aaa`, `aaaa`, `aaaaa`.

  * `{n,}` — не менее n вхождений. Пример: `a{3,}` — `aaa`, `aaaa`, `aaaaa` и так далее.

* Символы и операции.
  
    * `.` — любой одиночный символ (кроме новой строки).
  
      Пример: `a.b` соответствует `aab`, `acb`, но не `ab`.

    * `[abc]` — один из символов внутри квадратных скобок.
      
      Пример: `[abc]` соответствует `a`, `b`, `c`.

    * `[^abc]` — любой символ, кроме указанных в квадратных скобках.
      
      Пример: `[^abc]` соответствует любому символу, кроме `a`, `b`, `c`.

    * `[a-z]` — любой символ в диапазоне `a` до `z`.
  
      Пример: `[a-z]` соответствует любой строчной букве от `a` до `z`.
    
    * `a|b` — альтернатива, либо `a`, либо `b`.
    
      Пример: `example|domain` — либо `example`, либо `domain`.

    * `\\w` — любая буква.
    * `\\W` — не буква (цифра, подчеркивание, знаки препинания, пробел и так далее).
    * `\\d` — цифра и `\\D` — не цифра.
    * `\\s` — пробел и `\\S` — не пробел.

{% note info %}

Чтобы использовать символ не как оператор регулярного выражения или специальный символ, экранируйте его с помощью `\`. Например, надо экранировать символы `. + * [ ] ( ) { } ^ $ ?`.

{% endnote %}

### Регистр в регулярных выражениях {#regular-expressions-case}

* Учитывать регистр. Введите регулярное выражение в нужном регистре.
  
  Пример: `exaMple` соответствует строке `exaMple`.

* Не учитывать регистр. В начало выражения добавьте символы `(?i)`.
  
  Пример: `(?i)example` соответствует строкам `example`, `EXaMple`, `EXAMPLE` и так далее.

### Примеры регулярных выражений

* `User-Agent:\s*` — блокировать запросы, у которых значение заголовка `User-Agent` пустое или состоит только из пробелов.
    
    В этом выражении `\s*` — ноль или более пробелов.

* `\\[\'\"\.\;]` — блокировать запросы, содержащие `\` перед подозрительным символом (бэкслеш-инъекции).

    В этом выражении `\\` — бэкслеш, `[\'\"\.\;]` — любой символ из скобок.

* `a{100,}` — блокировать запросы, содержащие длинные последовательности одинаковых символов, что может быть признаком атаки.
    
    В этом выражении `a{100,}` — 100 или более символов `a` подряд.

* `--.*` — блокировать запросы, содержащие комментарии в SQL-запросах, что может быть признаком SQL-инъекции.

    В этом выражении `--` — начало SQL-комментария, `.*` — ноль или более любых символов.