2013-12-09 4 views
2

Мы разрешаем использование @import с помощью специального редактора CSS в нашей CMS, но я хочу знать, открыли ли мы себя потенциальными рисками для безопасности, выполнив это, можно ли его использовать для XSS?Возможно ли XSS через @import, и если да, то как? Существуют ли способы защиты от этого?

Если да, то как это будет работать, и дальше, как мы будем защищаться от такой атаки?

FYI, мы фактически не оставляют @import заявления в пользовательском CSS, когда он служил, они раздели через preg_replace_callback() и заменяли их фактического целевого контента через file_get_contents(). Это значит, что CSS все еще можно кэшировать, а не блокировать загрузку страниц, но, возможно, дает нам возможность фильтровать используемые URL или даже возвращаемый контент.


EDIT:

После быстрого образования от @duskwuff это очевидно есть много потенциальных проблем с предлагая услуги, но это похоже на подобный вопрос и ответ (здесь: https://stackoverflow.com/a/5209050/1058733) показывает, что можно сделать довольно безопасно, используя HTMLPurifier + CSSTidy для санирования CSS-ввода, который идеально поместился бы в нашем скрипте после file_get_contents() и до кэширования, а также во время процесса сохранения объектов для хорошей оценки.

+0

ничего себе! У меня нет ответа на это ... но если вы так беспокоитесь об этом, вы должны сначала спросить ... – Leonardo

+0

Для чего это стоит, кто-то может просто поставить фактический оператор '@ import' в файл передается через HTTP. Вы можете заменить '@ import' на что-то еще злонамеренное. – Brad

+0

@Leonardo, @Brad FWIW, я упоминал в FYI, что у нас есть возможность фильтровать/проверять возвращаемый код. Также не то, что это защита, так как они не являются моим выбором тестов, но вы можете сделать то же самое в Wordpress через свой собственный редактор css, так что это не так, как будто я изобретаю новые способы закрутить себя. На самом деле, наша возможность фильтровать и проверять из-за 'file_get_contents()' довольно уникальна. – oucil

ответ

3

Да. CSS, вообще говоря, не безопасно - Есть целый ряд способов, которыми он может быть использован для введения Javascript кода, в том числе, но не ограничиваясь ими:

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

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

+0

Спасибо за быстрое образование и ссылки! Я нашел предыдущий вопрос, который предоставляет примеры с использованием HTMLPurifier + CSSTidy для дезинфекции CSS, который выглядит довольно тщательно: http://stackoverflow.com/a/5209050/1058733 – oucil

Смежные вопросы