NoSuspiciousCharacters
Дата обновления перевода 2024-07-25
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;
}
Note
As with most of the other constraints, null
and empty strings are
considered valid values. This is to allow them to be optional values.
If the value is mandatory, a common solution is to combine this constraint
with 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
.
groups
type: array
| string
default: null
It defines the validation group or groups of this constraint. Read more about validation groups.
Дата обновления перевода 2024-07-25
payload
тип: mixed
по умолчанию: null
Эта опция может быть использована, чтобы добавить к ограничению произвольные данные, относящиеся к домену. Сконфигурированная нагрузка не используется компонентом Валидатор, но его обработка полностью зависит от вас.
Например, вы можете захотеть исользовать несколько уровней ошибок, чтобы представить неудачные ограничения в фронт-энде по-разному, в зависимости от степени сложности ошибки.