# Тесты и баллы

Письмо считается спамом при 5 баллах и отклоняется при 15. Каждый тест ниже добавляет или снимает баллы; в результате перечислены сработавшие.

Пороги меняются через `threshold` и `rejectThreshold`. Баллы меняются через `scores` — либо по ключу настройки (`scores: {deceptiveLink: 4}`), либо по имени теста, что фиксирует баллы этого теста (`scores: {FROM_NAME_BRAND: 4}`).


## Классификатор

| Тест                      | Баллы            | Значение                                                                                                                                                                                                                                                                                                                                                                                          |
| ------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BAYES_00` до `BAYES_999` | от −2,5 до +6,25 | Вероятность спама по оценке классификатора в логарифмической шкале шансов: 2,4 балла при 90 %, 5 при 99 % и 6,25 при 99,9 %, поэтому классификатор сам помечает спам, только если уверен хотя бы на 99 %. Имя указывает диапазон: `BAYES_999` — 99,9 % и выше, `BAYES_99` — от 99 % до 99,9 %, `BAYES_50` — от 40 % до 60 %. Ключи настроек `bayesHam` и `bayesSpam` задают два крайних значения. |


## Фишинг и ссылки

| Тест                        | Баллы | Ключ настройки      | Значение                                                                  |
| --------------------------- | ----: | ------------------- | ------------------------------------------------------------------------- |
| `PHISHING_LOOKALIKE_DOMAIN` |     5 | `homograph`         | Домен ссылки имитирует бренд похожими или переставленными символами       |
| `MIXED_SCRIPT_DOMAIN`       |     3 | `mixedScriptDomain` | Метка домена смешивает алфавиты                                           |
| `BRAND_IN_DOMAIN`           |   1,5 | `brandInDomain`     | Название бренда внутри чужого домена                                      |
| `TYPO_DOMAIN`               |     1 | `typoDomain`        | Отличается от домена бренда на одну букву                                 |
| `DECEPTIVE_LINK`            |     3 | `deceptiveLink`     | Ссылка показывает один адрес, а ведёт на другой                           |
| `MALICIOUS_DOMAIN`          |     6 | `maliciousDomain`   | Резолвер Cloudflare против вредоносных программ блокирует домен из ссылки |
| `ADULT_DOMAIN`              |     2 | `adultDomain`       | Семейный резолвер Cloudflare блокирует домен из ссылки                    |
| `URIBL_<LIST>`              |     5 | `uriblListed`       | Домен из ссылки есть в чёрном списке доменов, например `URIBL_DBL`        |

Домены, которые только упомянуты в тексте без ссылки, тоже проверяются на сходство с брендами, но учитываются, только если явно имитируют бренд: похожие буквы или переставленные символы для бренда из пяти и более букв. Ответ или подпись могут упоминать любой сайт, а у компании может быть короткое название, отличающееся от названия бренда на один символ.


## Вложения

| Тест                    |   Баллы | Ключ настройки                           | Значение                                                             |
| ----------------------- | ------: | ---------------------------------------- | -------------------------------------------------------------------- |
| `EXECUTABLE_ATTACHMENT` |      10 | `executable`                             | Программа или скрипт                                                 |
| `DISGUISED_EXECUTABLE`  |      12 | `disguisedExecutable`                    | Программа с именем документа или изображения                         |
| `DOUBLE_EXTENSION`      |       6 | `doubleExtension`                        | Имя вроде `invoice.pdf.exe`                                          |
| `RTL_OVERRIDE_FILENAME` |       6 | `rtlOverride`                            | Символ смены направления справа налево скрывает настоящее расширение |
| `EXECUTABLE_IN_ARCHIVE` |       8 | `executableInArchive`                    | Программа внутри ZIP-архива                                          |
| `ENCRYPTED_ARCHIVE`     |       2 | `encryptedArchive`                       | Архив, который сканеры не могут открыть                              |
| `MACRO_ATTACHMENT`      |       4 | `macro`                                  | Файл Office с макросами                                              |
| `PDF_ACTIVE_CONTENT`    |       3 | `pdfActive`                              | PDF с JavaScript, действиями запуска или встроенными файлами         |
| `RTF_EMBEDDED_OBJECT`   |       4 | `rtfObject`                              | Файл RTF со встроенными объектами                                    |
| `HTML_ATTACHMENT`       | 1 или 3 | `htmlAttachment`, `activeHtmlAttachment` | HTML-файл; 3, если в нём есть скрипты или формы                      |
| `VIRUS`                 |     100 | `virus`                                  | ClamAV обнаружил вирус                                               |


## Правила

| Тест                      | Баллы | Значение                                                                                    |
| ------------------------- | ----: | ------------------------------------------------------------------------------------------- |
| `GTUBE`                   |  1000 | Тестовая строка GTUBE                                                                       |
| `SEXTORTION_SUBJECT`      |     6 | Тема, которую используют мошенники с сексуальным вымогательством и захватом учётных записей |
| `PAYPAL_INVOICE`          |     6 | Счёт или запрос денег через PayPal — канал, которым злоупотребляют мошенники                |
| `MICROSOFT_SPAM_VERDICT`  |     5 | Microsoft пометил письмо как спам перед пересылкой (доверяется только с серверов Microsoft) |
| `MICROSOFT_HIGH_SCL`      |     3 | Microsoft присвоил ему высокий уровень уверенности в спаме (аналогично)                     |
| `PROMPT_INJECTION`        |     3 | Текст, обращённый к ИИ-фильтру                                                              |
| `SELF_SPOOF`              |     3 | Выдаёт себя за письмо из собственного домена получателя и не проходит аутентификацию        |
| `FROM_NAME_OTHER_ADDRESS` |   2,5 | Отображаемое имя содержит другой адрес электронной почты                                    |
| `FROM_NAME_BRAND`         |     2 | Отображаемое имя выдаёт себя за бренд, которому адрес не принадлежит                        |
| `DATE_IN_FUTURE`          |     1 | Дата больше чем на сутки впереди                                                            |
| `MISSING_DATE`            |   0,5 | Нет заголовка Date                                                                          |
| `MISSING_MESSAGE_ID`      |   0,5 | Нет заголовка Message-ID                                                                    |

Правила, которые стоят не меньше порога спама, также появляются в `results.arbitrary`, как в прежних версиях.


## Маскировка и язык

| Тест                   | Баллы | Ключ настройки        | Значение                                                         |
| ---------------------- | ----: | --------------------- | ---------------------------------------------------------------- |
| `INVISIBLE_CHARACTERS` |     2 | `invisibleCharacters` | Три или более невидимых символа внутри текста                    |
| `MIXED_SCRIPT_WORDS`   |   2,5 | `mixedScriptWords`    | Два или более слова смешивают буквы разных алфавитов             |
| `STYLED_LETTERS`       |   1,5 | `styledLetters`       | Математические или обведённые буквы, выдаваемые за обычный текст |
| `LANGUAGE_NOT_ALLOWED` |     3 | `languageNotAllowed`  | Язык не входит в `allowedLanguages`                              |


## Аутентификация

Требует IP-адреса клиента и `authentication: true`.

| Тест           | Баллы | Ключ настройки (в `authentication.weights`) |
| -------------- | ----: | ------------------------------------------- |
| `SPF_PASS`     |  −0,5 | `spfPass`                                   |
| `SPF_FAIL`     |     2 | `spfFail`                                   |
| `SPF_SOFTFAIL` |     1 | `spfSoftfail`                               |
| `DKIM_PASS`    |  −0,5 | `dkimPass`                                  |
| `DKIM_FAIL`    |     1 | `dkimFail`                                  |
| `DMARC_PASS`   |  −1,5 | `dmarcPass`                                 |
| `DMARC_FAIL`   |   3,5 | `dmarcFail`                                 |
| `ARC_PASS`     |  −0,5 | `arcPass`                                   |
| `ARC_FAIL`     |     1 | `arcFail`                                   |


## Репутация и чёрные списки

| Тест           | Баллы | Ключ настройки | Значение                                                   |
| -------------- | ----: | -------------- | ---------------------------------------------------------- |
| `DENYLISTED`   |   100 | `denylisted`   | IP-адрес, домен или адрес отправителя есть в чёрном списке |
| `ALLOWLISTED`  |   −20 | `allowlisted`  | Он есть в белом списке                                     |
| `TRUTH_SOURCE` |    −5 | `truthSource`  | Сервис репутации помечает отправителя как доверенного      |
| `RBL_<LIST>`   |     4 | `rblListed`    | IP-адрес клиента есть в чёрном списке, например `RBL_ZEN`  |


## Языковая модель и дополнительные модели

| Тест                                                  | Баллы | Ключ настройки | Значение                                                     |
| ----------------------------------------------------- | ----- | -------------- | ------------------------------------------------------------ |
| `LLM_SPAM`, `LLM_PHISHING`, `LLM_SCAM`, `LLM_MALWARE` | до +6 | `llmSpam`      | Вердикт модели, умноженный на её уверенность                 |
| `LLM_HAM`                                             | до −3 | `llmHam`       | Аналогично                                                   |
| `TOXIC_CONTENT`                                       | 3     | `toxicity`     | Предоставленная вами модель токсичности пометила текст       |
| `NSFW_IMAGE`                                          | 3     | `nsfw`         | Предоставленная вами модель изображений пометила изображение |
