как управлять безопасностью с помощью добавленного пользователем внешнего CSS (например, MySpace) - PullRequest
5 голосов
/ 23 августа 2009

У меня есть страница, на которую она была запрошена. Я разрешаю пользовательскую настройку с помощью CSS.

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

Однако проведенное мной исследование показывает, что xss легко сделать с помощью css. Но я не смог найти никаких ресурсов о том, как разрешить безопасное включение созданного пользователем внешнего CSS.

У кого-нибудь есть предложения или ресурсы для этого?

MySpace удается это сделать вместе с несколькими другими сайтами, но я не понимаю, как это обеспечить.

У меня нет никаких «безопасных» пользовательских данных на странице, куда отправляется внешний css. Но я получаю несколько переменных для поиска.

---------------- дополнительные данные после ответа Слики ----------------------

Я не планирую разрешать каждому пользователю добавлять внешние CSS. Тем не менее, переменная css может быть установлена ​​специальными квалифицированными пользователями, и как только эта переменная станет доступной, по сути, любой может установить ее по своему усмотрению. Единственный способ использовать эту переменную - это самим распространять URL, поэтому, возможно, я слишком обеспокоен безопасностью, но я сомневаюсь в этом.

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

У меня будет ссылка на мой сайт, где она будет http://mysite.com/page?useracct=12343&extcss=http://location/of/css.css

Я настраиваю useracct, поэтому только там, где пользователи, которым я разрешаю включить разные css, имеют ссылки, созданные для их страниц. На моем сайте я бы связал эту учетную запись со страницей css.

Так что кто-то не может просто прийти и сказать http://mysite.com/page?extcss=http://new/dangerous/css.css

Однако они могут создать ссылку http://mysite.com/page?useracct=12343&extcss=http://new/dangerous/css.css Единственный способ получить доступ к этой странице - это если человек, создавший опасный css, перенаправит эту ссылку.

Полагаю, если бы я хэшировал и подсолил extcss, он мог бы быть более безопасным. Может быть, это лучший путь?

Ответы [ 3 ]

4 голосов
/ 23 августа 2009

Используйте язык с библиотекой CSS или напишите синтаксический анализатор для создания AST-подобной структуры из CSS, а затем проверьте на хитрость.

Это может быть сложнее, чем кажется, например, divРазмеры (охватывающие всю страницу), плавающие и z-ордера будут сложны в управлении, и вам, возможно, придется ограничивать значения, которые вы можете предоставить.

хорошая идея

Создание схемы тем на основе XML, которая может быть переведена на CSS.Разрешить пользователям загружать изображения + XML для создания темы.

XML проще в управлении.

PHP CSS Parser , Разбор Python CSS

Удачи

2 голосов
/ 23 августа 2009

Хотя наличие собственного языка, позволяющего добавлять CSS, может показаться хорошим, вы все равно неизбежно столкнетесь с теми же проблемами, что и просто написать что-нибудь (например, загрузить внешние файлы и т. Д.) И оказаться в мире боли. .

Лучшая модель с точки зрения безопасности - продумать, что именно они захотят настроить, и позволить им редактировать только эти вещи.

Таким образом, вы можете предоставить способности для установки:

  • Цвета фона
  • Шрифты
  • Изображения для разных вещей
  • Etc

Твиттер (последний раз, когда я использовал его в любом случае) имел хороший метод для этого, и в результате сайт настраивается, но при этом поддерживает стандартный вид, что, IMHO, замечательно.

0 голосов
/ 08 октября 2009

Есть много способов, которыми CSS может выполнить произвольный JS. См

Если вам нужен гибкий синтаксический анализатор и дезинфицирующее средство CSS, вы можете взглянуть на CssValidator и связанные с ним тесты показывают, что он делает:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...