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

<body style="width: expression(alert())">

Как можно предотвратить выполнение выражения?

2
gr3g 22 Дек 2016 в 03:46
Вы спрашиваете, как предотвратить его выполнение в IE 7 или как предотвратить его выполнение в браузерах, которые все еще поддерживаются?
 – 
user3553031
22 Дек 2016 в 03:50
Ie7 давно мертв с точки зрения Microsoft.
 – 
Daniel A. White
22 Дек 2016 в 03:52
Это действительно проблема XSS? Разрешите ли вы пользователям вашего сайта редактировать его стили?
 – 
nnnnnn
22 Дек 2016 в 04:03
Я также хотел бы узнать, какие меры безопасности можно предпринять для поддерживаемых сегодня браузеров. @ / DanielA.White Это больше о том, как проблема решается, чем о самой проблеме. @ / nnnnnn Я бы никогда не позволил пользователям это сделать, но я хотел бы знать, что добавить, чтобы, если кто-то это сделает, мы в безопасности
 – 
gr3g
22 Дек 2016 в 04:21

2 ответа

В качестве защиты от внедрения JavaScript в неожиданных местах в современных браузерах используйте безопасность содержимого. политика. Например, CSP script-src: none; будет запрещать выполнение любого JavaScript на вашей странице, независимо от того, где он был создан. Могут быть разработаны более тонкие политики, позволяющие использовать JavaScript только из определенных URI или только скриптов с определенными хэшами.

1
user3553031 3 Янв 2017 в 21:39
Это хорошо для XSS, но здесь вредоносный код исходит от «я». Но это хороший ресурс, спасибо!
 – 
gr3g
22 Дек 2016 в 04:35
Вы можете запретить выполнение JavaScript из self или разрешить только сценарии с известными хэшами; это хорошая практика для предотвращения XSS в целом.
 – 
user3553031
22 Дек 2016 в 04:37
Это не помешает выполнению ни HTC, ни expression, поскольку оно работает только в IE11. Но согласен, это хороший первый уровень защиты! Выполняется ли ваш код Javascript, когда вы запрещаете выполнение javascript из self, или это параметр self для приложения JSF?
 – 
gr3g
22 Дек 2016 в 11:17

Функция, о которой вы говорите, называется Dynamic Properties и больше не поддерживается в IE8.

Динамические свойства (также называемые «выражениями CSS») больше не поддерживаются в Internet Explorer 8 и более поздних версиях, в стандартном режиме IE8 и более поздних версиях. Это решение было принято из соображений соответствия стандартам, производительности браузера и безопасности. Динамические свойства по-прежнему доступны в Internet Explorer 8 в режиме IE7 или IE5. (Дополнительные сведения о режимах совместимости документов см. В разделе «Определение совместимости документов».) Поскольку Internet Explorer 8 в режиме IE8 полностью совместим со стандартом Cascading Style Sheets, Level 2 Revision 1 (CSS2.1), большинство динамических свойств написано для обхода каскадного режима. Недостатки, связанные с таблицами стилей (CSS) в предыдущих версиях Internet Explorer, больше не нужны. Другие динамические свойства с более конкретным использованием обычно можно заменить стандартным JavaScript.

0
Dekel 22 Дек 2016 в 03:54
Итак, как это отвечает на вопрос о том, как это работает или как предотвратить это в IE7?
 – 
nnnnnn
22 Дек 2016 в 04:01
Я знаю, что это не поддерживается и не рекомендуется, я хочу знать, как они исправили это 5 лет назад. Потому что такая проблема существует с HTC до IE9.
 – 
gr3g
22 Дек 2016 в 04:01