CSS из textarea на странице параметров, чтобы настроить, что делать

У меня есть текстовое поле для небольших css-улучшений на странице плагинов i, выводя их прямо в голову. Мой вопрос – как дезинфицировать CSS

У меня есть функция проверки, зарегистрированная для параметров с register_setting . На странице настроек прямо сейчас $output['css'] = (string) $input['css']; это то, что я делаю. Должен ли я убежать от него? Что это значит? Может ли это ускользнуть для базы данных? Я мог там совершить какую-то злую инъекцию.

Для вывода я использую esc_attr() пока он отлично работает, но я просто хочу спросить, есть ли что-то лучше для него. Я только что протестировал " персонажей, которые они, очевидно, перевели на» " я просто протестировал их, и они, похоже, не разбивают CSS в firefox, но, конечно, это плохо. Итак, что я должен использовать вместо этого?

 echo '<style type="text/css" media="screen">' . esc_attr( $css ) . '</style>'; 

Кстати, я не забочусь о том, что " вы на самом деле не нуждаетесь в них в CSS, или я ошибаюсь, вы можете делать url (« bla ») или url (bla), и оба работают. Или есть причина поддержки в CSS?

Update1: после двух ответов, много, если говорить и думать, что мне все еще нравится знать, является ли мой мыслительный процесс настолько неправильным, чтобы избежать его дважды сейчас с помощью wp_filter_nohtml_kses () на входе базы данных и на выходе . Я был бы рад получить ответ от кого-то, кто обладает опытом в области безопасности.

Update2: Я просто замечаю, что wp_filter_nohtml_kses () не разрешит > или < поскольку они являются селекторами CSS, возможно, это не правильный фильтр. Может быть, другие вещи, которые он фильтрует, которые я могу захотеть в CSS?

Solutions Collecting From Web of "CSS из textarea на странице параметров, чтобы настроить, что делать"

Большинство плагинов, которые я видел, на самом деле не заботятся об этом. Они просто верят, что кому-то, кто сможет редактировать страницу параметров, можно доверять.

Вы можете использовать один из существующих php-классов для оптимизации CSS, поскольку они также будут дезинфицировать CSS при их анализе.

Одиночные или двойные кавычки («/») необходимы в CSS для случаев, когда значение имеет пробелы внутри. Конечно, этого обычно не будет с образцом, но имена шрифтов с пробелами очень распространены. Тогда вам понадобятся кавычки написать так:

 font-family:"Times New Roman",Georgia,serif; 

Я только что увидел, что есть аналогичный вопрос о stackexchange, который имеет хороший пример с рабочим кодом для HTMLPurifier + CSSTidy. Вы можете посмотреть здесь .

Таким образом, вы не должны использовать esc_attr. Он должен использоваться только для экранирования атрибутов в тегах HTML.

Что касается CSS, это зависит от того, кто является предполагаемым пользователем. Если вы делаете это для отдельного сайта, в котором только администратор может редактировать CSS, вам не нужно санировать. Но если он предназначен для использования в сети, вам нужно использовать функцию wp_filter_nohtml_kses для фильтрации всего HTML из CSS. Вы можете иметь

 echo '<style type="text/css" media="screen">' . wp_filter_nohtml_kses( $css ) . '</style>'; 

но более эффективно дезинфицировать, прежде чем хранить значение в БД.