Да, это уязвимость, нельзя вставлять данные напрямую в верстку.
Я использую такой код для подготовки текста для вставки в атрибуты:
strtr(
$text,
[
'&' => '&',
'"' => '"',
'\'' => ''',
'<' => '<',
'>' => '>'
]
)
Но это уже перед вставкой в атрибуты, а так данные по нормальному нужно фильтровать при получении от пользователя, я для этого использую функцию
xap()
отсюда