Самое простое решение, предусматривающее очистку входных данных, состоит в том, чтобы присвоить всем вашим атрибутам стиля флаг! Важный, а затем найти и заменить любые флаги! Важных, которые пользователь мог ввести в свой пользовательский CSS.
Вот еще немного информации об этом флаге: http://www.smashingmagazine.com/2010/11/02/the-important-css-declaration-how-and-when-to-use-it/
Более простое решение - удалить все теги из пользовательского ввода и разрешить применение CSS только к атрибуту стиля определенного элемента.
Однако любое из этих решений далеко не пуленепробиваемо. Пользователь может просто создать абсолютно позиционированный элемент, чтобы скрыть любые части сайта, которые он желает. Если вы хотите остановить это, у вас не будет другого выбора, кроме интеллектуального анализа каждого атрибута стиля, который они задают, и удаления тех, которые потенциально могут повредить макет веб-сайта. Это очень деликатная операция - и если предположить, что вы можете сделать это правильно, любой нежелательный атрибут уменьшит полезность того, чтобы позволить им писать свои собственные стили.
Я думаю, вы должны спросить себя: действительно ли вы доверяете этим пользователям писать свои собственные CSS и HTML? Или может быть лучше исследовать текстиль или уценку *? Если вы доверяете этим пользователям, разве это не должно быть проблемой? Я полагаю, что больше информации о природе этого контента поможет мне найти более подходящие решения.
* Я не могу опубликовать прямую ссылку на домашнюю страницу из-за мер по предотвращению спама в StackOverflow. Первая ссылка Google Search "Markdown", где вы можете узнать больше. К сожалению.