Пока все смотрят на изменения курса рубля, мы работаем. Именно поэтому после некоторого перерыва сегодня у меня снова есть новости касательно обновлений проектов. В первую очередь хочу рассказать об обновлении Taglibro, благодаря которому у данной CMS теперь появилась полноценная возможность работы через https.
Несколько дней тому назад я уже писал о планах касательно https и та статья стала неким двигателем в деле внедрения данного функционала в нашем программном обеспечении, не рассчитанном на бизнес-клиентов. По сути дела, поддержка работы через https была в Taglibro изначально и включалась всего лишь принудительным указанием протокола в конфигурационном документе. Тем не менее, наши клиенты сталкивались с некоторыми проблемами, среди которых, в первую очередь, внешний контент, который подгружается в текст заметок и приводит к тому, что соединение даже при самом дорогом сертификате распознается в браузере пользователя как защищенное частично. Проблем тут несколько, но я решил остановиться именно на иллюстрациях. Ядро IWE изначально не поддерживает загрузку иллюстраций непосредственно в заметки, их можно только загрузить на внешний ресурс и оттуда уже вставить при помощи прямой ссылки. Для тех, кому это нужно, мы комплектуем компонент администраторской панели, который создает частный хостинг картинок, другие же пользуются внешними сервисами либо размещают иллюстрации прямо на сервере.
С внешним контентом выходит проблема: не все хосты, с которых вставлены картинки на страницы, поддерживают работу через https. Некоторые отвечают сбросом запросов, а некоторые не отвечают вообще. Если вдруг шифрование на внешнем сервисе доступно, то это вовсе не означает того, что соединение будет полностью защищенным, так как некоторые сервисы хранения фотографий имеют на своих серверах хранения либо самоподписанные сертификаты, либо сертификаты с перепутанными именами, благодаря чему соединение все так же небезопасно. В данном случае, бесспорно, наилучшим вариантом является загрузка иллюстраций с того же сервера, к которому обращается посетитель. Многие порталы с переходом на https прибегли именно к такому методу путем проксирования запросов к картинкам и внешнему контенту на своем сервере. Проксирование — не самый безопасный метод, поскольку загрузить можно не только картинку, но и произвольный код. В связи с этим обстоятельством, первое дело, которое нужно при проксировании запросов — это хорошая фильтрация контента, причем не просто по расширению, но и по содержанию. Поскольку в Taglibro основным типом контента являются изображения, то мы добавили фильтр, который распознает наиболее популярные форматы изображений, а не все иные запросы отвечает ошибкой.
Первый этап тестирования прошел успешно, однако в жизни все не так, как на самом деле. Оказалось, что сервера с картинками могут находится в Америке и Китае, соответственно, обращения к ним будут обрабатываться далеко не так быстро, как нам бы того хотелось. А теперь представьте: страница с сотней картинок (блог путешественника, например) с американского сервера будет параллельно подгружаться одновременно у десяти посетителей. Это будет похоже на небольшой DDoS, что уж рассуждать о том, что посетители будут совершенно не довольны тем, что картинки будут загружаться с задержкой. Тогда нам в голову пришла идея кэшировать картинки на определенный срок. Тут, конечно, в зависимости от количества картинок и объемов жесткого диска. Конечно, блоггер с миллионом фотографий и виртуальным хостингом на 1Гб явно не захочет копировать на свой сервер весь свой фотоальбом с одного известного почтового сервиса (он же и фотохостинг), а вот на жестком диске в 500Гб запросто уместится небольшой блог и все его фотографии (наш, к примеру, занимает около 800Мб и умещается пока даже на компакт-диске). После того, как фотография будет открыта однократно через прокси, ее копия сохранится в кэше Taglibro и все последующие обращения будут получать в качестве ответа уже эту копию. Таким образом, мы не устраиваем DDoS ни себе, ни хостингу. Кроме того, администратор ресурса может настроить кэширование таким образом, чтобы все копии удалялись по графику, либо по истечении определенного срока, в течение которого не было ни одного обращения к той или иной картинке. Также, для большей безопасности, администратор может указать список разрешенных ресурсов. К примеру, если все фотографии загружаются на один фотохостинг, то нет никакого смысла включать кэширование для всех. Это уже положительно повлияет на безопасность.
Второе обновление носит несколько иной характер и относится к безопасности. Не так давно нашими тестерами была выявлена уязвимость в системе междоменной авторизации для бизнес-клиентов. Суть уязвимости заключалась в том, что похитив cookies, можно было провести повторную авторизацию без ввода пароля с того же IP-адреса. Конечно же, это достаточно трудно назвать серьезной уязвимостью, поскольку имея доступ к cookies и IP-адресу, по сути дела, можно взломать достаточно много различных аккаунтов, которые используются в этом же браузере. Тем не менее, мы посчитали, что это не совсем правильно и приступили к действию. Теперь повторное использование сессий больше не поддерживается, а пользователь будет идентифицироваться при помощи большего количества факторов, которые позволяют отличить его от другого даже на одном и том же IP-адресе. В будущем мы планируем и далее развивать данное направление дабы обезопасить пользователей системы междоменной авторизации от кражи cookies.
Как результат сегодняшней работы, Taglibro поднялась до версии 2.1, при этом 2.0b так и осталась в тестовой версии, так как новую мы считаем более совершенной, да и к тому же во время тестирования 2.0b произошли некоторые изменения ядра, которые делают дальнейшее использование той ветки невозможным.