У меня есть строка, которая поступает от пользователя, а затем вставляется в большой блок CSS с помощью синтаксического анализатора CSS.
Экранирование CSS можно выполнить с помощью \C
(где C — символ), \HexOfC
(с пробелом) или \6DigitHexOfC
.
Как правило, все символы можно безопасно экранировать, и CSS по-прежнему будет работать должным образом. Следующие работы:
div {
background: \23 f66;
}
<div>Test</div>
Тем не менее, я по-прежнему хочу, чтобы свойства CSS были как можно более «чистыми», потому что я хочу, например, иметь возможность четко просматривать URL-адреса и правила с помощью инспектора.
Есть персонажи, которые явно плохие. {};\*
следует экранировать, потому что их можно использовать для нарушения текущего правила. Я управляю белым списком (все экранируется, кроме разрешенного) символов (в отличие от черного списка, где разрешено все, кроме разрешенного). Персонажи из белого списка, которые у меня есть в настоящее время,
'#', ',', '.', '(', ')', '-', '%', '+', '=', '/', ' ', ':', '\'', '"', '\n', '\r'
Есть ли здесь опасные персонажи? Все, что можно использовать, чтобы нарушить правило и повлиять на остальную часть блока CSS. Есть ли персонажи, которых здесь нет, которые могли бы быть ненужно сбежавшими? (По умолчанию буквенно-цифровые символы не экранируются).