Обновить

Комментарии 52

лично меня не сильно задене но спрошу: что со стандартизацией таких вещей?
НЛО прилетело и опубликовало эту надпись здесь
ага, хорошо бы стандартизировать список CSS-свойств, которые разрешены
Это просто пипец, дорогая редакция. Не могут устранить уязвимость, страдает верстка. Что дальше, отменят background у body? Может вообще убрать поддержку javascript? Может стоит подумать и найти решение попроще?
Почему не могут. Вот как раз устраняют. Или вы не в курсе, в чем суть уязвимости?
Я в курсе.

Неужели нельзя разделить внешнее представление и то, что отдает скрипт? Ведь часть параметров все-таки оставили.

Нельзя же просто так взять, и что-то перестать поддерживать или придумывать какие-то свои схемы. Это дорога к IE ранних версий.
Как вы себе представляете разделение внешнего вида? Любой из не запрещенных параметром даст изменение размеров, что будет легко вычислено скриптом.
А прозрачность?
Да, было бы интересно узнать что такого в background-color: transparent.
Хотя, скорее имелось ввиду что (полу)прозрачность нельзя использовать именно с функциями rgba/hsla. Но вопрос всё равно открыт.
Хороший вопрос. Затрудняюсь ответить.
Можно накрыть canvas'ом и проверить попиксельно.
Да вариантов тысячи. Я вот и говорю, что не стоит делать ограничения со стороны CSS. Все равно это не выход.
А foreground color нельзя так же проверить?
Можно.
Ёлки… в таком свете все эти изменения выглядят сомнительно (по крайней мере запрет на фоновое изображение).
В современном CSS и JS слишком много возможностей, всё перекрыть вряд ли получится. Разве что два dom-дерева держать — одно для показа, второе для обработки браузером :)
И у вас будет прозрачный пиксель канвы. Она же не рендирит на себя изображение, она обычный полупрозрачный элемент.
По-моему, ограничения на CSS — очень плохое решение
НЛО прилетело и опубликовало эту надпись здесь
о ужас… кто-то узнает какие страницы я посещал х)))
НЛО прилетело и опубликовало эту надпись здесь
«параноик» звучит куда солидней, чем «идиот»
НЛО прилетело и опубликовало эту надпись здесь
Очень странное решение.
Вообще для использования уязвимости достаточно изменения хотя бы 1 параметра, например, цвета. Все остальное ничего не изменит, ни добавит, ни убавит. То есть надо либо все отключать, либо все оставлять.
Если так озабочены безопасностью, то сделали бы, чтобы функция getComputedStyle для ссылок на другие домены и не поддомены данного возращала какую-то ерунду. Либо сделайте ограничение на 500 вызовов. Все равно ничего толком не проверишь за эти 500 вызовов.
НЛО прилетело и опубликовало эту надпись здесь
getComputedStyle не единственный способ узнать посещена ли ссылка. И даже менее неудобный. Достаточно что-то вроде

CSS:
a:visited { display: none; }

JS:
alert(a.offsetWidth? 'Не посещена': 'Посещена');

Поэтому и вырубают свойства, влияющие на layout.
Как вариант, это можно реализовать в Noscript, как только при парсинге встречается эта функция выдается предупреждение. Можно добавить сайт в вайтлист. Тем более, предупреждение позволит оценить ситуацию: откуда получена ссылка и т.д. Но это слишком навороченный вариант для обычных пользователей.
то сделали бы, чтобы функция getComputedStyle для ссылок на другие домены и не поддомены данного возращала какую-то ерунду.
А они не так по вашему сделали?
Видимо не все сами сообразить могут, нужно развернут мысль:
Если будет возвращать ерунду в прямом смысле, это легко детектится — цвет должен быть синий, а возвращает коричневый, записываем как посещенную. А сейчас для всех ссылок возвращается такой цвет, как для не посещенных и поэтому детектировать посещенность нельзя.
НЛО прилетело и опубликовало эту надпись здесь
Если отображаться всё будет «как надо», то злоумышленник может легко проверить ссылки в обход «врущих» функций.
НЛО прилетело и опубликовало эту надпись здесь
Тогда для js прикаждом обращении к дому придется делать рефлоу, либо вести 2 лейаута параллельно. Помимо того, что это просто затратно, это может повлечь такие клюки, что волосы у разработчиков зашевелятся. (элемент на экране есть, а черех js он не видим, или на строку перенесся)
НЛО прилетело и опубликовало эту надпись здесь
а нужен ли :visited вообще?
Да.
Это убогий способ, никогда так не делайте.
Лучше сделайте нормальную реализацию хотя бы CSS2… IE и тот вас обходит.(чисто субъективное мнение)
Про свое «субъективное мнение» ты отлично подметил, да...)
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Не вижу проблем в Опере 9.6 и 10.5, аналогично ие8. А в хроме да, что-то не так.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Субьективно, как web-разработчик, просто уже устал костыли ему ставить. Особенно если через аякс динамически элементы добавляю.
Это первоапрельская шутка? ;)
Если мы оставляем хотя бы один аттрибут для стилизации, то проблем проверить ссылки — никаких. Даже если браузер будет «скрывать» реальные данные. Всё очень просто! Делаем в DOM тег A, делаем ему :visited цвет какой-то. Браузер рисует нужным цветом, но getComputedStyle нам его не возвращает. Что ж. Не беда!

Шаг второй. Этот тег A заворачиваем в SVG, SVG грузим как картинку в Canvas, читаем цвет пикселей. Вот мы и обошли ограничение браузера. Хоть и немножко гемморно.

Правда в IE не будет работать скорее всего и в Opera 10.5+.
Тю ты хоспади. Не проще ли применить более очевидное решение: подсвечивать посещённые ссылки в рамках одного домена. Ну, то есть, там где ты кликнул на ссылку, там она и изображается как посещённая. Тем более, что для такого решения существует наработанная база: принцип немногим отличается от принципа хранения кукисов. Это, конечно, тоже ограничение, но всё же не на CSS.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации