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

Π­Ρ‚Π° опция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, относящиСся ΠΊ Π΄ΠΎΠΌΠ΅Π½Ρƒ. Бконфигурированная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ Π’Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€, Π½ΠΎ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ зависит ΠΎΡ‚ вас.

НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΈΡΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ошибок, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹Π΅ ограничСния Π² Ρ„Ρ€ΠΎΠ½Ρ‚-эндС ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ, Π² зависимости ΠΎΡ‚ стСпСни слоТности ошибки.