Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kukutz ([info]kukutz)
@ 2006-01-26 14:14:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Из-за чего поменяли схему адресации и авторизации ЖЖ
Тут ходят упорные слухи, что "из-за Мозиллы". Нет, не из-за Мозиллы.

Из-за своего исторического раздолбайства.

В ЖЖ всегда (ну или очень давно) можно было подключать внешние стили, CSS. Всегда во внешних стилях можно было использовать скрипт и украсть куку в MSIE (поправьте меня, если я ошибаюсь). Не так давно это же научились делать и в Mozilla.

После того, как хакерская группа Bantown стала использовать эту уязвимость в массовых масштабах, перед разработчиками ЖЖ встали такие альтернативы:
1. Запретить внешние CSS. Приведёт к ужасным воплям и массовым исходам на другие сервисы. Потому что люди привыкли.
2. Проставить куке аттрибут HttpOnly, чтобы её нельзя было прочесть из скрипта. Не решает проблемы, потому что Mozilla не поддерживает HttpOnly, т.е. это защитит только IE-пользователей.
3. Переделать схему авторизации так, что если украсть вашу куку в чужом журнале, то это не даст ничего сделать в вашем журнале. Это и выбрали.

Правда ведь, в этом не "дыра в Mozilla виновата", да?

Другие сервисы могут легко защититься от таких проблем, просто не давая использовать внешние CSS (ну, наряду с использованием санитайзера для вырезания скриптов из того пользовательского HTML, что внутри сервиса).

UPDATE: это не информация от разработчиков, а мои домыслы. Поэтому со мной можно спорить - буду рад, если спор будет аргументированным =)


(Добавить комментарий)


[info]zmey2@lj
2006-01-26 08:19 (ссылка)
а можно ссылку на то, что проблемы действительно из-за внешнего CSS? Насколько мне известно куки в ЖЖ уже давно HttpOnly, а внешним CSS можно нагадить не только утащив куку (а стерев скажем журнал или сменив мейл)

(Ответить) (Ветвь дискуссии)


[info]kukutz@lj
2006-01-26 08:21 (ссылка)
Ссылки нет, это мой вывод на основании изучения
http://brad.livejournal.com/2191154.html
и
http://www.davidpashley.com/cgi/pyblosxom.cgi/computing/livejournal-mozilla-bug.html

Как можно стереть журнал внешним CSS?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]zmey2@lj
2006-01-26 08:25 (ссылка)
ага, спасибо

джаваскриптом можно изменить статус журнала например
или стирать по одной записи

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kukutz@lj
2006-01-26 08:27 (ссылка)
Как?
Насколько я знаю, все формы в ЖЖ защищены от CSRF. Или что имеется в виду?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]zmey2@lj
2006-01-26 08:31 (ссылка)
Мне надо подготовиться к ответу на этот вопрос :)
френдов было можно добавить полгода назад, возможно сейчас что-то изменилось

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kukutz@lj
2006-01-26 08:34 (ссылка)
Буду благодарен за ответ. Можно почтой, если не хочется светить.

(Ответить) (Уровень выше)


[info]drdaeman@lj
2006-01-26 10:07 (ссылка)
Дык, в общих словах говоря - AJAX'ом поработать. Теперь, слава Богу, не получится, разделение печенюшек по доменам не даст, а раньше можно было всё что угодно делать.

Вот, гуглем нашлось практически сразу же: http://community.livejournal.com/evan_tech/150019.html
Хотя как XMLHttpRequest ведёт себя с HttpOnly cookies я не знаю, сам не пробовал никогда. Говорят, работает.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kukutz@lj
2006-01-26 10:13 (ссылка)
Насколько я понимаю, в ЖЖ есть anti-CSRF, который заключается в том, что разными способами проверяется, что полученные данные пришли из формы, заполненной пользователем, а не скриптом.

Разве это не так?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]drdaeman@lj
2006-01-26 10:35 (ссылка)
lj_form_auth стянуть заранее со страницы несложно, challenge-response не проблема значит. С Referer сложнее, у меня только под Firefox получилось, там спокойно сработало xmlhttp.setRequestHeader('Referer','...'). Но под Fx уже бы журнал удалился — хэдеры есть, форма есть — уже не отличить от обычного запроса. Но вообще ошибся, AJAX, значит, не решение тут.

Впрочем, ещё сейчас появилась мысль создать скрытый фрейм и в нём поиграться с DOM, просто «нажав» кнопку удаления за пользователя. Кросс-доменные вопросы нас не должны были беспокоить, а вроде бы больше ничего и не остаётся в такой схеме… =/

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kukutz@lj
2006-01-26 10:39 (ссылка)
Да уж. Неприятно.

(Ответить) (Уровень выше)


[info]trezub@lj
2006-02-26 09:38 (ссылка)
а как стянуть lj_form_auth? Сейчас бьюсь над автоматическим добавлением во френды... пока не сильно получается :(

(Ответить) (Уровень выше)


[info]avva@lj
2006-01-26 08:30 (ссылка)
Если бы в Мозилле было HttpOnly (пункт 2), то не нужно было бы менять схему авторизации.

Я написал полный патч для поддержки HttpOnly в Мозиллу два года назад, запостил его в Багзиллу, исправил кое-что вследствие критики, и так он до сих пор там и лежит, потому что девелоперы решили, что правильнее будет сначала полностью переделать устройсто файла cookies.txt. А это так до сих пор никто и не сделал.

Если бы модель разработки Мозиллы реально работала так, как она должна была работать, HttpOnly давно бы уже был в Мозилле, в нескольких последних версиях.

(Ответить) (Ветвь дискуссии)


[info]mendokusee@lj
2006-01-26 08:33 (ссылка)
Т.е. вам тоже гипотеза представляется состоятельной?

(Ответить) (Уровень выше)


[info]kukutz@lj
2006-01-26 08:34 (ссылка)
Ну это понятно. Но обвинять мозиллу в чём-то, кроме игнорирования твоего патча и неподдержки httponly (а он в RFC есть в каком-то?) всё равно неверно =)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]drouk@lj
2006-01-26 12:38 (ссылка)
Кстати, это серьезный вопрос - этот httponly - он стандарт или очередная попытка заткнуть архитектурую дыру? Кто-нибудь системно о нем думал? Может там по другому нужно проблему решать?

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

(Ответить) (Уровень выше)


[info]snark_nn@lj
2006-01-26 08:44 (ссылка)
А нельзя-ли предложить пользователю выбор: старая схема и запрет на CSS либо разрешение CSS + новая схема?
Не знаю, реализуемо-ли это вообще, просто интересно.
Не дает покоя вот это: http://community.livejournal.com/rulj/859084.html?thread=5968076#t5968076

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]angryxpeh@lj
2006-01-26 09:36 (ссылка)
Я не знаю, может я такой уникальный, но по-моему, если человек НА РАБОЧЕМ МЕСТЕ занимается не относящимся к работе (чтение ЖЖ, думаю, является таковым на 99%), то возмущаться тем, что работодатель узнает, что же на самом деле читает работник – как-то странно.

Ну и говорить о прайвеси, когда в логе сквида хранятся ВСЕ посещенные URL`ы, как-то тоже странно.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]snark_nn@lj
2006-01-26 12:14 (ссылка)
Давайте оставим за рамками, можно ли читать ЖЖ на работе. Очевидно, что в русском ЖЖ это довольно большой процент пользователей, и не все работодатели строго против такого положения дел.

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

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]angryxpeh@lj
2006-01-26 22:09 (ссылка)
Понимаете, у меня такое убеждение, что если человек не хочет нести ответственность за некоторые дела, то ему лучше эти дела не делать.
Если бы мне хотелось описать сиськи секретарши, да так, чтобы она об этом не узнала, я бы написал о них в ЖЖ в самую последнюю очередь. Выкладывать нечто в общий доступ, где это могут прочитать миллионы, и жаловаться на то, что это может прочитать коллега из соседней комнаты – это, по-моему, вообще верх неадеквата.

Я, кстати, на работе ЖЖ читаю. Правда, только срезку из френдленты по людям, которых знаю лично – если им что-то понадобится, я могу побыстрее среагировать.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]snark_nn@lj
2006-01-28 08:17 (ссылка)
На самом деле это все из серии "Честному человеку нет повода бояться милиции".
В теории - действительно так. На практике - возможны варианты.

Можно долго рассуждать, что стоит писать в ЖЖ, а что нет, но факт в том, что уровень приватности резко снижен.
Я думаю, вам не составит труда придумать гипотетическую ситуацию, когда невинная запись в ЖЖ прочитанная "не теми" людьми приводит к совершенно непредсказуемым последсвиям.
Когда среди аудитории вашего ЖЖ появляется МНОГО людей, знающих вас, но незнакомых вам - это крайне опасная ситуация.

(Ответить) (Уровень выше)


[info]kukutz@lj
2006-01-26 09:55 (ссылка)
Очевидно же, что нельзя.

Потому что запрет на CSS у вас, а CSS у злоумышленника.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]snark_nn@lj
2006-01-26 12:17 (ссылка)
Я имел ввиду как раз это - запрет на показ МНЕ CSSов ДРУГИХ юзеров, на основании параметров МОЕГО ЖЖ.
Возможно это тоже не возможно, хотя лично мне это не очевидно.

(Ответить) (Уровень выше)


[info]david_m@lj
2006-01-26 08:38 (ссылка)
Я думал. Честно думал. Никакой другой причины, кроме этой несчастной CSS-дыры не придумал.

Но вообще, это ОХГДЕЖ. На такого воробья выкатывать такую пушку…

(Ответить) (Ветвь дискуссии)

lol
(Анонимно)
2006-01-26 09:00 (ссылка)
В симанки фиг выкрасть. Ту дырку ещё во время первых недель отделения пофиксили, коряво, но пофиксили

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: lol
[info]david_m@lj
2006-01-26 09:48 (ссылка)
Вы с кем разговаривали сейчас?

(Ответить) (Уровень выше)

Re: lol
[info]kukutz@lj
2006-01-26 09:58 (ссылка)
Ту дырку = -moz-binding? А чем докажете?

(Ответить) (Уровень выше)


[info]ex_ex_zhuzh@lj
2006-01-26 10:05 (ссылка)
1. Запретить внешние CSS. Приведёт к ужасным воплям и массовым исходам на другие сервисы. Потому что люди привыкли.

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

(Ответить) (Ветвь дискуссии)


[info]kukutz@lj
2006-01-26 10:11 (ссылка)
Это можно; но насколько часто надо такой CSS перечитывать? Понимаете проблему, да?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ex_ex_zhuzh@lj
2006-01-26 10:33 (ссылка)
Не чаще, чем показывается сам журнал, а то и реже (в соответствии с правилами кеширования). Нагрузка на внешний сервер при этом не увеличивается, а на ЖЖ-шный — увеличивается незначительно. В CS2 стили вообще генерируются на лету при каждом просмотре. Можно также дать пользователям возможность скопировать внешний CSS на ЖЖ-шный сервер и подправить урл в стиле по нажатию одной кнопки.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kukutz@lj
2006-01-26 10:36 (ссылка)
Вообще да, не знаю, почему так не сделали.

Вероятно потому, что санитайзер CSS написать не так просто, особенно с учётом всяких @import.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ex_ex_zhuzh@lj
2006-01-26 11:52 (ссылка)
Кто говорил, что будет просто? :) @import нужно рекурсивно закачивать и санитизировать, да.

Но я бы не стал полагаться на санитайзеры, а искал бы какое-то другое решение.

(Ответить) (Уровень выше)


[info]david_m@lj
2006-01-26 13:23 (ссылка)
Ну неужели сложнее, чем HTML? Там же гораздо более простой синтаксис. Ну, импорт, ну и что? Тянуть и импорт тоже, понятное дело. Не вытянулось — рубить эту директиву. Я почему-то уверен, что написать санитайзер для CSS гораздо проще (я уж про незаметность для юзера не говорю), чем сделать то, что мы наблюдаем в последнюю неделю.

Другое дело (я в это почти не верю, но вероятность такая есть), что мы можем сейчас наблюдать не просто затыкание конкретной дыры, а полное перелопачивание системы безопасности, которое давно назревало и которое, в перспективе, может дать юзерам больше возможностей. Тот же вопрос с разрешением JS или Flash.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kukutz@lj
2006-01-26 14:50 (ссылка)
Насчёт "гораздо более простой" ты, конечно, погорячился.

Взять те же бекслеши - про них я знаю, а мало ли какие ещё символы "незначащие".

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2006-01-27 06:03 (ссылка)
Но они же сделали фильтр HTML-я? Сделали. Ты же не будешь говорить, что это проще? Выяснить тонкости всяких экранирований — это максимум день целенаправленного гуглования и пара дней экспериментов.

(Ответить) (Уровень выше)


[info]drdaeman@lj
2006-01-26 10:13 (ссылка)
Что интересно — а могут ли теперь ЖЖ (теоретически) давать пользователям JS (благо, он все равно есть) в дизайне на своих страницах, для дизайнерско-извращенских целей?

Френдлента на AJAX с гуем в духе Яndex.Ленты или Google Reader, с пометками прочитанного, флажками мемориз и подобной дрянью это было бы круто. Вопрос как с безопасностью, нет ли из JS способа нагадить теперь, с усиленной защитой.

(Ответить) (Ветвь дискуссии)


[info]kukutz@lj
2006-01-26 10:14 (ссылка)
Думаю, что этот вопрос будет обдумываться. Дело ясное, что дело тёмное =)

(Ответить) (Уровень выше)


[info]casual_user@lj
2006-01-26 10:34 (ссылка)
3. Переделать схему авторизации так, что если украсть вашу куку в чужом журнале, то это не даст ничего сделать в вашем журнале. Это и выбрали.

Я чего-то не понимаю. Как это не даст? Куки выставляются на все домены *.livejournal.com, воруешь куку с любого домена, она подходит для любого другого домена.

(Ответить) (Ветвь дискуссии)


[info]kukutz@lj
2006-01-26 10:38 (ссылка)
Я тоже не до конца понимаю, но, кажется, не должно быть куки *.livejournal.com. Ну или она не должна быть мастер-кукой, а мастер-кука должна жить на yourlogin.livejournal.com.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]casual_user@lj
2006-01-26 11:05 (ссылка)
А, действительно, есть мастер-кука только на домен www.livejournal.com, я смотрел список устанавливаемых кук 22 января, тогда куки были только на .livejournal.com, а сейчас появилась и на www.livejournal.com (и еще почему-то дубликаты на livejornal.com, хотя вроде бы .livejornal.com должно всем браузерам хватать):


Set-Cookie: ljsession=v1:u5988060:s30:t1138280400:[skipped]; domain=.livejournal.com; path=/; HttpOnly
Set-Cookie: ljsession=v1:u5988060:s30:t1138280400:[skipped]; domain=livejournal.com; path=/; HttpOnly
Set-Cookie: ljloggedin=u5988060:s30; domain=.livejournal.com; path=/; HttpOnly
Set-Cookie: ljloggedin=u5988060:s30; domain=livejournal.com; path=/; HttpOnly
Set-Cookie: ljmastersession=v1:u5988060:s30:[skipped]; domain=www.livejournal.com; path=/; HttpOnly

(Ответить) (Уровень выше)


[info]david_m@lj
2006-01-27 06:09 (ссылка)
Но они же сделали фильтр HTML-я? Сделали. Ты же не будешь говорить, что это проще? Выяснить тонкости всяких экранирований — это максимум день целенаправленного гуглования и пара дней экспериментов. Т.е. конкретно задача недопущения JS в CSS решаема вполне традиционными методами.

А так получается интересная вещь: если внешний CSS не запретят (и он не будет фильтроваться), то JS фактически будет разрешён.

(Ответить)