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, але його обробка повністю залежить від вас.
Наприклад, ви можете захотіти використати декілька рівнів помилок, щоб представити неуспішні обмеження по-різному у фронтенді, залежно від серйозності помилки.