Как стать автором
Обновить

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

Придет время и веб-индустрия поймет, что единственный адекватный подход к защите от XSS это:

  • Использовать DOM-based шаблоны вместо текстовых
  • Исключить использование inline-javascript в HTML, включая on* аттрибуты
  • Использовать Content-Security-Policy и X-Frame-Options: DENY
  • Фильтровать ссылки и адреса ресурсов, генерируемые динамически
Действительно, единственный адекватный подход к защите от чего угодно — это закрыть все векторы атак. А можно просто не позволять пользователю передавать на сервер ничего, что может быть исполнено в браузере (ну и, соответственно, не выполнять на сервере ничего, что было прислано пользователем).
Сама по себе ситуация, когда разрешаешь какому-то левому человеку на свой сайт вставлять любой Html уже странная.
В любом другом случае надо тупо ескейпить пользовательский вывод, наверное во всех уже веб языках есть тупо спец функция.

Язык, в котором существует такая команда, как eval(), не может быть безопасным по определению.
Но ведь в любом тюринг-полном языке можно написать свой собственный eval(). И что, все небезопасны? :)
Разумеется, да.
Язык, предназначенный для выполнения кода в рамках песочницы, имеет право быть тьюринг-полным только на ограниченном множестве действий.

Скажем, если вы запретите в языке Java компиляцию кода и отрубите JNI, то язык станет вполне себе безопасным (с точностью до протечек)
Это не остановит тех, кто умудрится написать компилятор на самой Java — то есть сам по себе eval всё равно возможен.
Так на здоровье. Пусть пишут компилятор. Всё равно, как сам компилятор, так и код, который он способен сгенерить, будет жить в пределах всё той же песочницы. Скажем, если вы не подключите свой ноутбук к кофеварке, он никогда не сварит вам кофе. Что бы вы на нем ни программировали. Хотя он является вполне Тьюринг-полной машиной :)

Что касается eval, то он страшен только одним — он делает почти невосможной задачу «сужения» возможностей JS. То есть как с кошкиной головой — если куда-то ролезет eval, то туда проезет весь JavaScript. Что и проиллюстрировал талантливый юноша.

Я про eval написал, потому что в статье много раз повторялось «MySpace запретил то», «MySpace запретил сё», а потом следом показывается, как это обойти. И почти всегда обходится это с помощью eval.
Еще можно написать, что вообще все в мире небезопасно и жизнь боль, тока как это относится к данной статье?
Очень просто. Если сократить статью до одной строки и предельно обобщить, она будет звучать примерно так:
«В очередной раз люди, считавшие, что некая технология находится у них под контролем и ничего катастрофического произойти не может, получили сообразно своей самоуверенности и за это, как водится, наказали того, кто продемонстрировал это».

А мысль, которую я высказал, была очевидна опытным разработчикам 20 лет назад так же, как и сегодня (я уверен в этом, потому что имею некоторый опыт общения с хорошими девелопервамми поколения своих родителей). Но, увы, технологии развиваются так, что на языке, изначально «спроектированном» (если вообще такое слово может быть применено к нему) для того, чтобы анимировать баннеры на сайтах, пишут клиентскую часть к интернет банкам. А о безопасности начинаем думать только когда случится катастрофа. В итоге огребем с такой культурой.
Можно более кратко — бойся тех кто любит свое дело, не хочешь бояться хотя бы их выслушай.
Если бы парень не бросил школу, он бы узнал, что такое геометрическая прогрессия, и смог бы предвидеть результат работы вируса.
Это не геометрическая прогресия, большая часть контактов будет ссылаться на уже имеющиеся.

Это теория графов и «6 рукопожатий». Первое институт, второе тогда ещё было непопулярно.
Я не говорю о точном моделировании ситуации.

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

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

И давайте не будем спорить, это не принципиально в данном случае.
Он же писал червя не задумываясь ни о чем. Тогда еще небыло публикации и исследований о круге друзей, друзей-друзей, никто не строил(или не публиковал на весь интернет) миллионные графы знакомств. Он вполне мог подумать, что круг его друзей и всех их друзей замкнутый и обводится шариком. Ведь его цель была — не узнать, кто кому приходится другом, а просто проверить код, запустить свою идею на весь сайт… А последствия начиная с миллионом друзей, заканчивая уголовным преследованием было во вторую очередь.
Задаче о зернах и шахматной доске сотни лет. Точно не знали? ))
Я вам про мягкое, а вы мне про теплое. Одно дело знать учения, другое — помнить обо всех них в определенный момент. Если бы Сэм задумался обо всем, то конечно такой сообразительный человек смог бы понять, что этот вирус расползется, и что это повлечет уголовку(с которой в Америке в области киберпреступлений гораааздо строже, чем у нас).

Но дело то в том, что его полностью охватило желание испытать технологию. Неужели с вами никогда такого не было?
С этим и я согласен. =)

Просто ситуация может быть классическим примером, что классическое образование вовсе не так бесполезно, как кажется.
Ну да. А так он узнал об этом на практике, обменяв три года без компьютера на мировую известность и уникальное место в истории компьютерной безопасности. Реально стал героем своего времени. :)
меня больше позабавил Ableton и Arduino Studio на второй картинке.
А вы бы хотели фотку, которую тайно сняли спецслужбы из-за его спины в день, когда он кодил своего червя?
Особо доставило два окошка «Arduino IDE» на второй картинке
А это не тот ли парень, что соорудил evercookie? Радует, что известен он не только этим червем.
У него проектов много, и все они достаточно крутые:
samy.pl/combobreaker — взломщик замков
samy.pl/keysweeper — сниффер беспроводной клавиатуры в корпусе зарядного устройства
samy.pl/pwnat — пробрасывалка NAT с классной идеей
github.com/Proxmark/proxmark3 — устройство для работы с RFID-картами
Вот интересно. Ну он же не мог полноценно протестировать червя перед запуском.
Почему Starbucks, а не любой торговый центр?
Это рекламная вставка, ради которой всё это и писалось.
Часто так говорят все про это кафе.
Не только, еще Чипотли.
Его последующие продукты тоже интересные — автоотмычка для замков, перехватывальщик дронов и evercookie например.
А "& quot;" для кавычек?
MySpace не пропустит любое экранирование кавычек

Хоть предложенный вами вариант и не является буквально «экранированием», полагаю этот вариант тоже заглушен как очевидный.
А ещё
eval('document.body.inne' + 'rHTML')
можно было бы заменить конструкцией
document.body['inne' + 'rHTML']
Зарегистрируйтесь на Хабре, чтобы оставить комментарий