Pull to refresh

Веб-сокеты временно отменяются

Browsers
Ровно год назад, 9 декабря 2009, разработчики Google Chrome взбудоражили общественность, объявив внедрение поддержки веб-сокетов в будущих версиях Chrome. О том, что такое Web Sockets и что это дает, см. почти годовалый пост на хабре.

Веб-сокеты — это, действительно, вкусно.

С точки зрения веб-стандартов, Web Sockets — это отдельная спецификация, вынесенная из спецификации HTML5 еще весной 2009 для дальнейшей проработки внутри рабочей группы по веб-приложениям (WebApps WG). В настоящий момент документ находится в состоянии Working Draft.

Интересной особенность веб-сокетов является то, что это не просто API в браузере: механизм работы веб-сокетов завязывается на соответствующий протокол — WebSocket Protocol, разрабатываемый в рамках IETF, и требует соответствующей поддержки со стороны сервера. Текущая редакция драфта – 03 (17 октября), до этого было еще 76 ревизий. С последней в начале лета была неприятная история, когда новая ревизия оказалась несовместимой со старой.

Поддержка веб-сокетов была заявлена в Chrome и Safari, а также, насколько я понимаю, должна была быть доступна в предварительных версиях Opera 10.70-11 и Firefox 4b. (Ок, очевидно, что IE9 в этом списке нет, однако, справедливости ради: разработчики не раз заявляли, что в первую очередь внедряют стабильные и устояшиеся вещи, которые не приведут к обратным несовместимостям через несколько месяцев.)

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

Что же произошло?


В конце ноября Adam Barth опубликовал результаты исследования надежности используемого протокола. Выяснилось, что сам используемый протокол подвержен серьезным уязвимостям:

The Upgrade-based handshake is vulnerable to attack in network configurations involving transparent (or intercepting) proxies.

We found that for a $100, we were able to poison the cache of 8 users by using the Upgrade-based handshake. When the attacker is able to poison the proxy's cache in this way, the attacker can exploit /every/ user of the cache, with potentially dangerous consequences. For example, the attacker can poison the proxy's cache entry for http://www.google-analytics.com/ga.js and inject JavaScript into approximately 57% of the top 10,000 web sites.




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

Подробнее см. тут http://www.adambarth.com/experimental/websocket.pdf

Очевидно, что протокол будет дорабатываться и сейчас в списке рассылки можно наблюдать довольно бурное обсуждение.

Вскрытая проблема оказалась довольно серьезной для того, чтобы разработчики Firefox и Opera объявили, что до устранения проблем в будущих версиях их браузеров поддержка веб-сокетов будет закрыта. В Firefox поддержка будет закрыта, начиная с версии FF4b8. Комментарий от Opera см. тут.

Что это означает для разработчиков?


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

Впрочем, хочется надеяться, что если вы использовали веб-сокеты, вы делали проверку поддержки функциональности (feature detection) и у вас была ветка на случай отсутствия свойства window.WebSocket.

Важно подчеркнуть, что это не проблема браузеров, а именно используемого протокола. И, кстати, уязвимости в нем также затрагивают Java и Flash, поэтому ждем, будет ли реакция от Oracle и Adobe.

p.s. На злобу дня — небольшой ролик по цитатам из блогов Google и Firefox.
Tags: web socketssecuritychromefirefoxopera
Hubs: Browsers
Total votes 59: ↑55 and ↓4 +51
Comments 48
Comments Comments 48

Popular right now