NoSuspiciousCharacters

Дата оновлення перекладу 2024-05-29

NoSuspiciousCharacters

Валідує, що заданий рядок не містить символів, які використовуються для спуфінгу, наприклад, невидимих символів, таких як пробіли нульової ширини або символів, які візуально схожі.

"symfony.com" і "ѕymfony.com" виглядають схоже, але перша буква відрізняється (у другому рядку "s" насправді є кириличною малою літерою dze). Це може змусити користувача подумати, що він перейде на сайт Symfony, тоді як це буде щось інше.

Це свого роду спуфінг (так звана "атака омографа IDN"). Вона намагається ідентифікувати щось як щось інше, щоб використати плутанину, що виникла в результаті. Ось чому рекомендується перевіряти ідентифікатори, надані користувачами, публічні ідентифікатори на наявність підозрілих символів, щоб запобігти таким атакам.

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

Ось чому це обмеження гарантує, що рядки або Stringable не міститимуть жодних підозрілих символів. Оскільки воно використовує Spoofchecker в PHP, розширення intl має бути ввімкнено для його використання.

?????????????? ?? ??????????? ??? ??????
???? NoSuspiciousCharacters
????????? NoSuspiciousCharactersValidator

Базове використання

Наступне обмеження буде використовувати різні механізми виявлення, щоб гарантувати, що ім'я користувача не підроблено:

1
2
3
4
5
6
7
8
9
10
// src/Entity/User.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class User
{
    #[Assert\NoSuspiciousCharacters]
    private string $username;
}

Дата оновлення перекладу 2022-12-20

Note

Як і в більшості інших обмежень, null та порожні рядки вважаються валідними значеннями. Це для того, щоб дозволити їм бути опціональними значеннями. Якщо значення є обовʼязковим, розповсюдженим рішенням буде комбінація цього обмеження з NotBlank.

Опції

checks

тип: integer за замовчуванням: all

Ця опція є бітовою маскою перевірок, які ви хочете виконати над рядком:

  • NoSuspiciousCharacters::CHECK_INVISIBLE перевіряє наявність невидимих символів, таких як пробіли нульової ширини або послідовності символів, які, ймовірно, не будуть виведені, наприклад, декілька повторень одного і того ж нерозривного пробілу.
  • NoSuspiciousCharacters::CHECK_MIXED_NUMBERS (можна використовувати з ICU 58 або вище) перевіряє наявність чисел з різних систем числення.
  • NoSuspiciousCharacters::CHECK_HIDDEN_OVERLAY (використовується з ICU 62 і вище) перевіряє об'єднання символів, прихованих у попередньому символі.

Ви також можете налаштувати додаткові вимоги за допомогою locales та restrictionLevel.

locales

тип: array за замовчуванням: framework.enabled_locales

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

Наприклад, символ "π" буде вважатися підозрілим, якщо ви обмежите локаль до "English", оскільки грецька писемність не пов'язана з англійською.

Передача порожнього масиву або налаштування restrictionLevel як NoSuspiciousCharacters::RESTRICTION_LEVEL_NONE вимкне цю вимогу.

restrictionLevel

тип: integer за замовчуванням: NoSuspiciousCharacters::RESTRICTION_LEVEL_MODERATE в ICU >= 58, інакше NoSuspiciousCharacters::RESTRICTION_LEVEL_SINGLE_SCRIPT

Конфігурує набір допустимих символів для валідованого рядка через вказаний "рівень":

  • NoSuspiciousCharacters::RESTRICTION_LEVEL_MINIMAL вимагає, щоб символи рядка відповідали сконфігурованим локалям'.
  • NoSuspiciousCharacters::RESTRICTION_LEVEL_MODERATE також вимагає, щоб рядок було covered латиницею та будь-яким іншим Recommended або Limited Use скриптом, за винятком кирилиці, грецької та черокі.
  • NoSuspiciousCharacters::RESTRICTION_LEVEL_HIGH (можна використовувати з ICU 58 або вище) також вимагає, щоб рядок було covered будь-яким із наведених нижче наборів скриптів:

    • Латиниця + Хань + Бопомофо (або еквівалентно: Latn + Hanb)
    • Латиниця + Хань + Хіраґана + Катакана (або еквівалентно: Latn + Jpan)
    • Латиниця + Хань + Хангуль (або еквівалентно: Latn + Kore)
  • NoSuspiciousCharacters::RESTRICTION_LEVEL_SINGLE_SCRIPT також вимагає, щоб рядок був single-script.
  • NoSuspiciousCharacters::RESTRICTION_LEVEL_ASCII (використовується з ICU 58 або вище) також вимагає, щоб символи рядка знаходилися у діапазоні ASCII.

Ви можете прийняти всі символи, встановивши цю опцію як NoSuspiciousCharacters::RESTRICTION_LEVEL_NONE.

Дата оновлення перекладу 2023-09-24

groups

тип: array | string за замовчуванням: null

Визначає групу або групи валідації обмеження. Прочитайте більше про групи валідації.

Дата оновлення перекладу 2024-05-29

payload

тип: mixed за замовчуванням: null

Ця опція може бути використана, щоб додати довільні дані, специфічні для домену, до обмеження. Сконфігуроване корисне навантаження не використовується компонентом Validator, але його обробка повністю залежить від вас.

Наприклад, ви можете захотіти використати декілька рівнів помилок, щоб представити неуспішні обмеження по-різному у фронтенді, залежно від серйозності помилки.