RSS от 3 Марта 2008

Когда-то давно я читал RSS через Оперу. Это был хабрахабр, башорг и один форум. Причем рсс форума брался каждые 3 минуты, поэтому аккаунт на форуме все время был “онлайн” и набрал 40 суток “счетчика посещений”.

Затем Google Reader. Когда я уезжал учиться в Томск он был абсолютно незаменим с его версией для мобильника. Около 70 фидов по цене “веса” контента для GPRS – просто сказка. Синхронизация мобильника (понимаю, что у того же iPhone с такими возможностями все обстоит покруче, но у меня был тогда N73) с компьютерной версией читалки нахаляву – огромный плюс. Читать фиды в транспорте – невероятно круто.

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

Так как это прежде всего веб-аппликация, у Гугл Ридера имеются свои особенности: открытие линков из фидов в том же окне браузера, например. Или немоментальное получение обновлений (вплоть до суток). Но это жертвы, на которые можно пойти.

Теперь я перешел на NewsFire, так как он стал бесплатным. Интерфейс от Дэвида Ватанабе – минимализм во всём, как я его люблю. Но всем виндузятникам советую Гугл Ридер.

Что я изменилось с сегодняшнего дня, так это то, что я перестал опускать руки там, где не отдают полный RSS или его нет вообще. Поигравшись в Yahoo! Pipes 15 минут, я быстро разобрался с тем, как выдрать полный рсс (Полный разбор кейса с сэмплом фида дневника Леонида Каганова по ссылке в комментах на oolah.ru).

Сейчас это около 120 фидов, из них 10 – комиксы, 30 – персональные блоги, 10 – коммьюнити, 50 – технические блоги и агрегаторы. OPML-файл с фидами.

---

XSS в веб-аппликациях. от 26 Января 2008

Я, конечно, понимаю, что сейчас основным фактором разработки приложений является скорость. Rapid-development, все дела.

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

Что это и зачем?

XSS – инъекция JavaScript-кода на атакуемый сайт.

Стоит учесть тот факт, что лишь немногие считают XSS чем-то серьезным. Если у вас не хранится паролей в открытом виде в кукисах, это еще не значит, что ничего особо вредного хакеры не сделают.

Не буду рассказывать как делаются XSS, как они находятся, как обходятся фильтры: об этом и так написано мегабайты статей. Я же расскажу, что можно сделать, имея XSS.

Открытие фреймов

Что значит открытие фреймов? Прежде всего, имитация действий юзера. Открываем фрейм на страничку со списком собственных постов (или на страницу поиска постов по имени автора), для каждого из них открываем форму редактирования, заменяем везде текст каким-нибудь дефейсным контентом, сабмитим формы. Все посты юзера изгажены. Обычные проверки на CSRF тут не покатят, потому проверяльщики просто не отличат редактирование поста эксплойтом от редактирования поста юзером.

Допустим, у вас есть панель управления на сайте. Все настройки, не требующие подтверждения капчей или паролем легко уязвимы. Можно перефразировать так: Любой контент на сайте, видимый юзеру уязвим: Своровать, отредактировать, удалить. То, что позволяет система.

Распространение

Представим, что на сайте есть форум с фильтром HTML. Хакер обошел фильтр и нашел XSS. Чтобы подвергнуть атаке максимальное количество юзеров, он может начать спамить во всех разделах форума и быть быстро спаленным и забаненным. К тому же, чистить посты одного юзера очень просто.

Есть другой подход, более интеллектуальный, заключающийся в создании JS, который кроме выполнения своих обычных вредоносных задач, будет копировать сам себя в другие посты.

Представим простой вариант XSS. выбрасывающий алерт:

<script>
alert('You're screwed');
</script>

Предположим, что мы хотим, чтобы юзеры распространяли этот код, создавая новые темы в форуме с id = 3:

<script id="my_special_xss">
var c = document.createElement('form');
c.method = "POST";
c.action = "/forum/post/"; 
var i = document.createElement('hidden');
i.name = "forum_id";
i.value = 3; //Let's imagine it's the third forum
c.appendChild(i); 
var j = document.createElement('hidden');
j.name = "title";
j.value = "У меня тут появилась одна хорошая мысль";
c.appendChild(j); 
var k = document.createElement('hidden');
k.name = "title";
k.value = 'Ah well nevermind<script id="my_special_xss">' +
document.getElementById('my_special_xss').text + //Обратите внимание, у <script> не innerHTML, а text
'</sc' + 'ript>'; //IE fix
c.appendChild(k);
c.submit();
</script> 

Код создает форму создания нового топика, и прикрепляет к сообщению сам себя1. Можно не создавать новые топики, а редактировать уже существующие. Можно делать проверку, заражена ли уже эта страница (присутствует ли #my_special_xss).

Точно так же можно флудить по всему форуму подставляя рандомные ID топиков в форме ответа. Можно создавать шум, нажимая на кнопку “пожаловаться модератору”. Голосовать за новости (те, кто видел дефейс хабра от 22-го числа, понимают, чем это грозит). В принципе, делать любые действия, не требующие юзер-интерактива.

Использование юзера, как зомби

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

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

Впаривание троянов, тулбаров и кодеков.

Широко известен троян, который селится на машине пользователя через дырки в браузерах и заражает все сайты, на которые юзер законнектится по ftp. Действует он точно так же – открывает фрейм на malicious страничку, которая уже и грузит юзеру начинку. Главное здесь – приобрести или самому набрать побольше браузерных багов, как именно – дело самого хакера.

Загрузка скриптов с удаленного сервера

Казалось бы, что особенного? А то, что код может выдаваться каким-нибудь серверным-скриптом, значит поведение эксплойта можно контроллировать удаленно. Допустим, сохранять в базу данных логин текущего юзера (например, выдирать из “Привет, Inviz!” или из куки, если он там лежит) и не грузить юзеру эксплойт больше одного раза.

Доподлинно известно, что с кое-какими XSS-эксплоитами идет админка, в которой можно корректировать векторы атаки.

Заключение

Возможности широки. Отличительной особенностью XSS является простота нахождения дырок. За одну ночь, слегка поковырявшись в рунете мною были найдены дырки на шести высокопосещаемых сайтах в совершенно разных местах – попупе, показывающим фотки, в тайтле страницы, в поиске, по нажатию на кнопку и т. д.

Частично, это связано с тем, что лишь немногие на JavaScript программируют, в основном копипастят. Немногие понимают, как работают XSS векторы и что нужно сделать, чтобы их фильтровать. И немногие понимают, чем все это грозит. Хотя бы последний пункт, я постарался осветить.

1 Данный подход называется XSS Worm Replication и на сайте ha.ckers.org совсем недавно проходил контест на самый короткий код червя

---

Mac OS X Leopard Kalyway от 18 Января 2008

С нового года сижу на MAC OS X 10.5.1 (Leopard).

Нет, я не купил Мак, просто я поставил Хакинтош, так как железо позволяет (Intel Core Duo 2, P5LD2, X1800XT).

После трех дней мучений, я все-таки смог установить версию Kalyway, но…

Если бы не одно ядро на процессоре, жизнь была бы прекрасна. XBench выдает позорные 45 попугаев.

Сафари – отстой. Не кеширует абсолютно, флеш тормозит, из-за этого сёрфить тяжко. В опере флеш летает, но у оперы чисто виндовый user experience, поэтому поставил Firefox 3. Не работает 95% экстеншенов: LiveHTTPHeaders, TamperData и прочие. Скин “под леопард” на тройке так же не работает (на самом деле работает, но с такими чудесами…).

Поставил сразу:

Чтобы наладить merb, пришлось выкачивать XCode Tools ради gcc (с пятого раза выкачал iGetter‘ом. Предыдущие разы пытался выкачивать через Сафари и архивы оказывались битыми).

gem install merb 
gem install sequel_core
gem install sequel_model
...
gem install rutils

Далее, выкачал и собрал mysql и установил mysql-gem с родными биндингами. Теперь всё работает.

Воллпепер сменил на тигеровский. Раскладку на виндовую менять не стал – уже привык. Фаерфокс почти голый.

---

Вконтакте от 18 Января 2008

Я не регистрировался на vkontakte.ru (далее – ВК) из-за личных предубеждений. Во-первых – казуально, а во-вторых – калька с фейсбука. Ну и немаловажный пунктик здесь в том, что я сам делал социальную сеть и так и не доделал.

Old news is old news, но я оцениваю сервисы с точки зрения девелопера.

Что сделано хорошо?

Рутина

Смержины все дубликаты университетов, удалены фейки. Виден большой труд.

Русский язык

Поиск по имяформам (Настя – Анастасия), склонение имён по падежам (заметил пару ошибок, но почти всегда точно склоняет).

Кое-какие элементы

Есть вещи, которые сделаны безукоризненно. Граффити, например.

Что сделано плохо?

Архитектура.

Сразу виден недостаток профессионализма: архитектуры никакой нет, слизать API с фейсбука, естественно, не смогли. Выскакивают тут и там косяки, свидетельствующие об inconsistensy кода (например, если спровоцировать любую ошибку, 404, например, в юзер-меню часть пунктов будет отсутствовать, и не будут показаны счетчики новых вещей). Rss? Работа без Js? Search-engine reach?

Не очень удобный интерфейс.

Понятно, что фейсбук. Но можно было оптимизировать хотя бы немного. Я опечатался в собственном имени и не смог найти где это исправляется. Пришлось идти в группу поддержки, найти там FAQ, в нем только найти, что есть такой пункт в Настройках (отчего-то самый нижний пункт меню). Почему не в моих личных данных? Почему никнейм тоже указывается в настройках, а не при регистрации? Да много таких вопросов.

Фотоальбомы – просто уродские. Блоги – опять же, уродские. Но бывает и хуже, конечно.

Невнимательность к мелочам

Очень много незаметных на первый взгляд косяков бросаются в глаза. Например, числа прописью. В одном месте стоял неправильный падеж, а в другом прописью писались только 1 и 2, далее – цифрами. В одном и том же предложении могло быть число прописью и цифрами.

Недостаточное количество пояснительной информации

Я, конечно, сразу понял, как нужно заполнять текстовое поле с лейблом Интересы. Односложно, через запятую. Но многие этого не понимают, поэтому сплошь и рядом видны такие интересы как: “Разные игры)): Heroes I-II-III-IV; CS; WOW”. Достаточно было одного параграфа текста, поясняющего, что не нужно писать сокращениями. Каждую часть из серии записывать, как новый интерес. Цифры писать арабские, а не римские. В кавычки не брать. Смайликов не ставить.

А на самом деле, правильнее, конечно много текстовых инпутов.

Или, например, текущая реализация групп-клубов. Мало того, что им даются имена вроде

============================== 
_____Мой_Путь_-_Свобода!_____ 
==============================

чтобы “лучше” смотрелось в сайдбаре, так еще и многие вступают в группы только из-за названия. Нигде не сказано, зачем группы нужны. Как правильно ими пользоваться.

Непонятные лимиты

В “Заметках” (сиречь блогах) число символов в посте ограниченно на глаз 2*2^10^ Когда в личных сообщениях планка явно выше. На “стене” (сиречь гостевухе) лимиты по-моему вообще не указаны. Число связей (человек-человек, человек-клуб) или неограничено или лимит слишком высок. На мой взгляд правильнее делать так:

Ну и ограничение на количество сообщений не-друзьям 25. Такого быть вообще не должно. Если это привентивная мера против спама, то это просто глупо. Ну не давайте отсылать больше 5 сообщений отличающихся друг от друга менее чем на 25% не-друзьям. Или после этих 25 введите капчу, не совсем запрещать ведь! И в любом случае, спамеру очень просто зарегистрировать нового болванчика. Дело двух курловых запросов.

Вывод

ВК – неплохая социальная сеть с огромной юзербазой. Но чувствуется какая-то недоделанность, что ли. Ну и бесполезность для юзера (об этом написано много статей, повторяться не буду).

Ну и интересно, какая же там бизнес-модель?

---

Убогое безвкусие от 2 Января 2008

Если у человека есть вкус, ему автоматически в два раза тяжелее жить, чем остальным.

Выбирая подарок на новый год, обходив три больших магазина (сиречь “гипермаркета”), я поразился. Даже имея деньги и желание их потратить, именно потратить их оказалось очень тяжело, потому что многоярусные полки всех лавок, отделов и магазинчиков завалены ширпотребом и отстоем. Немыслимыми винтажными куклами и фигурками, невероятными сувенирчиками, ужасными игрушками и прочим гоневом. Возможно, тут сказывается “рыночное” прошлое этих “бутиков”, но в целом картина такова: людей устраивают flawed-by-design вещи.

Еще тяжелее с этим обстоит в различном хай-теке. Я, даже, не говорю о самих гаджетах, сколько о софте внутри. Подбирая тему для N95, я пролистал 65 страниц различных поделок и ничего не смог выбрать. Голые жопы, зверюшки, абстрактные хайтечные паттерны… вот и всё что можно найти. Только найдешь симпатично-попсовую обоину, так там совершенно уебищные иконки. Нахрена вообще пытаться менять иконки темой? Совершенно очевидно, что все не поменяешь, есть какой-то кастомный софт со своими иконками, который будет “не в струю”. Так ведь они еще и плохо обтравлены и подобраны. Приглянулась одна из тем, посмотрел обоину, установил, а там… посередине логотип Windows Vista. Или Messenger. Хит сезона – фейковое окошко explorera с папками, криво отресайзенное чтобы влезти сбоку экрана.

На N73 была варезная тема “под мак ос тен” (одна из нескольких), которая была просто идеальной: аккуратная обоина и пару мелких кастомайзов. Никаких overfeatures. Но на N95 она не подходит.

Я понимаю, что это всё мой ревностный и субъективный минимализм, который движет меня убирать все иконки из софта, в котором я знаю хоткеи, который заставляет меня писать экстеншн для фаерфокса, добавляющий “контейнеры” для иконок в статусбаре, который заставляет меня убирать всё что только можно из дефолтной темы текстпаттерна.

Но, блин, думать, прежде чем дизайнить – это круто.

---

Write lettarz'n'shit yo от 2 Января 2008

Окей, привет.

Ярослав Федин, без одного дня восемнадцати лет, живу в где-то в Сибири.

Большой опыт вёрстки и яваскрипта, средний опыт php и ruby-девелопмента: верстал – фрилансером, кодил яваскрипт – опенсорсником (as a mootools developer), пхпшничал от безысходности, ну а руби – моя текущая любовь, работа и хлеб.

Сейчас делаю проект с Лёшей Балтыжаковым – локальную казуальную социальную сеть (merb + sequel + mootools).

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

---