Проверить / проверить, не является ли предоставленный пользователем CSS злом - PullRequest
2 голосов
/ 27 ноября 2009

Я бы хотел, чтобы пользователи моего веб-приложения могли сохранять пользовательский CSS через текстовое поле, чтобы изменить внешний вид своего графического интерфейса.

Я предполагаю, что есть некоторые злые хакеры CSS. О чем мне следует позаботиться?

Ответы [ 6 ]

7 голосов
/ 27 ноября 2009

Одним из решений было бы предоставить пользователю опции через некоторый редактор, позволяя им выбирать цвет / размер различных элементов. Затем создайте CSS самостоятельно на основе параметров, предоставленных пользователем.

Это предотвратит любой нестандартный CSS или CSS, который вы не хотите использовать для сохранения.

3 голосов
/ 27 ноября 2009

Я могу подумать только об одном: CSS-выражениях (которые, однако, оцениваются только в IE). Они позволяют использовать JavaScript в файлах CSS, поэтому я бы удалил что-нибудь вроде

property: expression(...);

или просто выдать ошибку «Не разрешено».

Но затем, если вы доставляете CSS именно тому пользователю, который его первым поставил, он несет ответственность, если сам вводит уязвимость XSS.

В любом другом случае: используйте решение Зевса.

2 голосов
/ 27 ноября 2009

Если вы разрешаете пользователям напрямую включать пользовательский CSS на ваш сайт, вы просите хакеров захватить его. Вы на самом деле делаете систему тем более неиспользуемой, потому что это могут делать только люди, знающие CSS. Если ваш сайт не предназначен специально для веб-программистов, то, вероятно, лучше создать набор тем, из которых пользователи смогут выбирать.

Вы также можете создать набор инструментов на своем сайте, которые позволят пользователю изменять определенные стили на странице через пользовательский интерфейс, а не напрямую через CSS. Это позволит большему количеству пользователей более гибко стилизовать свои страницы, но обычно это происходит за счет увеличения времени разработки - если вы не используете CMS, а ваша конкретная CMS позволяет легко реализовать эту функцию в ядре или в плагине. *

Надеюсь, это поможет.

1 голос
/ 27 ноября 2009

Хотя я бы пошел за ответом Зевса, вы могли бы использовать анализатор CSS (поиск SO, есть различные вопросы) и проверить все входные данные по списку утвержденных свойств (color, background и т. Д.).

1 голос
/ 27 ноября 2009

Помимо прочего, проверьте, действительно ли они CSS: http://jigsaw.w3.org/css-validator/

0 голосов
/ 27 ноября 2009

Если ваши пользователи могут изменять только свой собственный CSS, а не другой пользователь, какова опасность? CSS будет предоставлен только им, поэтому в худшем случае они смогут взломать себя, нет?

...