Возможна ли междоменная атака через таблицу стилей? - PullRequest
6 голосов
/ 07 марта 2012

Мне нужно реализовать гибкую систему стилей для веб-страниц, которые создаются пользователями моего веб-приложения.

В идеале я хотел бы разрешить им использовать CSS.Является ли ссылка на таблицу стилей по определенному пользователем URL-адресу Плохая идея ? Почему ?Можно ли сделать это безопасно?

Каким будет ваш подход к этому?Я пытаюсь избежать создания стиля «редактор».Хотя можно использовать готовый вариант, предложения?

Ответы [ 2 ]

5 голосов
/ 07 марта 2012

Можно ли сделать это безопасно?

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

Кроме того, очевидно, что CSS может инициировать запросы к любому виду URL, установив background-image или аналогичный. Браузер заметит, что URL-адрес не является допустимым ресурсом изображения, но запрос всегда будет выполняться. Таким образом, можно вызвать запрос на ввод пароля, который пользователь сайта может принять за свое приглашение к входу в систему.

Мне не известны какие-либо сценарии векторов атаки через CSS, хотя я почти уверен, что IE behavior может быть одним из них. Я бы определенно избавился от них.

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

4 голосов
/ 07 марта 2012

Да. Это может быть вектор. Этот бит livejournal .

LiveJournal содержит уязвимость, позволяющую проводить удаленную межсайтовую скриптовую атаку. Этот недостаток существует, поскольку приложение не проверяет атрибуты стиля CSS в сценарии '/cgi-bin/cleanhtml.pl' перед сохранением. Это может позволить пользователю создать специально созданный URL-адрес, который будет выполнять произвольный код в браузере пользователя в рамках доверительных отношений между браузером и сервером, что приведет к потере целостности. Узнайте больше на osvdb.org/21896

Векторы атак Кахи Вики объясняет, как expression и moz-binding и подобные механизмы могут разрешить выполнение произвольного кода.

Эффект

Созданные таблицы стилей CSS могут выполнять неанизированный JavaScript в глобальном масштабе в некоторых браузерах.

...

Версия

IE 5 и более поздние версии (но не IE 8 или более поздние в «стандартном режиме»).

Mozilla / Firefox, версии не известны.

Пример * * одна тысяча тридцать одна <div id='oDiv' style='left:expression(alert("hello"), 0)'> Example DIV </div> node.style.cssText = 'left:expression(alert("hello"), 0)'; <input style='-moz-binding: url("http://www.mozilla.org/xbl/htmlBindings.xml#checkbox");'> div { -moz-binding: url(data:text/xml;charset=utf-8,%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Cbindings%20id%3D%22xbltestBindings%22%20xmlns%3D%22http%3A//www.mozilla.org/xbl%22%3E%0A%20%20%3Cbinding%20id%3D%22xbltest%22%3E%3Ccontent%3EPASS%3C/content%3E%3C/binding%3E%0A%3C/bindings%3E%0A); } node.style.MozBinding = 'url("http://www.mozilla.org/xbl/htmlBindings.xml#checkbox")'; <ul> <li style="behavior:url(a1.htc) url(a2.htc)">List Item</li> </ul>


Можно ли сделать это безопасно?

Да. Вы можете занести в белый список свойства CSS и вычеркнуть все, что не считаете безопасным.

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

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