Facebook пытается блокировать консоль разработчика в браузере Chrome

    Некоторые пользователи после запуска Developer Tools в браузере Chrome на сайте Facebook получают предупреждение большими буквами: «Будьте осторожны! Эта функция браузера предназначена только для разработчиков».



    С помощью такого сообщения Facebook хочет предотвратить выполнение кода в консоли неграмотными пользователями.

    Автодополнение тоже заблокировано.



    Раньше считалось, что консоль браузера невозможно заблокировать со стороны сервера, но Facebook пытается это сделать. Один из разработчиков Facebook объясняет: это эксперимент, который действует для части аудитории Facebook. Дело в том, что в последнее время на Facebook участились случаи атаки типа self-XSS, когда злоумышленник методом социальной инженерии убеждают пользователей Chrome запустить вредоносный код в консоли. Для этого нужно, чтобы пользователь нажал буквально пару хоткеев (Ctrl+Shift+J) и Enter.



    Как показано на видео, жертва своими руками осуществляет XSS. Чтобы защитить малограмотных пользователей, Facebook и пытается перехватить запуск консоли с помощью обращения к console._commandLineAPI.

    Object.defineProperty(console, '_commandLineAPI',
       { get : function() { throw 'Nooo!' } })

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

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

    • НЛО прилетело и опубликовало эту надпись здесь
        +1
        Навреное имелось ввиду: «Ctrl + Shift + J»(win) или «Cmd-Alt-J» (mac)
          +16
          Странно, мне всегда казалось что F12 удобней.
            +2
            Имеется ввиду переход в саму консоль, а не на последнюю активную вкладку в Developer Tools.
              0
              Только если смотреть на клавиатуру.
                +8
                Макбука сейчас под рукой нет, но помнится мне, что там Ф12 не работало по умолчанию.
                  +4
                  На «Маке» F12 переключает на экран виджетов.
                    0
                    дадад, спасибо.
                      0
                      Или прибавляет громкость )
                      Нажимать Fn+F12 на буке неудобно — надо руки сильно растопыривать :)
                      Уж лучше Cmd+Alt+J.
                        –2
                        Функции по умолчанию клавиш F1 — F12 зависят от модели Мака.
                        У меня например, без нажатия на Fn, клавиша F12 делает громче звук.
                          –2
                          На «Маке» нет отдельной клавиши F12, как, например, нет отдельной клавиши для символа «#». «Решётка» вводится нажатием Shift+3, F12 — Fn + 12-я клавиша в верхнем ряду (отсюда и название — Fn).
                        0
                        alt+cmd+I => Web Inspector, alt+cmd+J => консоль. А еще фулскрин-режим — не F11, а shift+cmd+F
                        0
                        На F12 может быть повешен какой-нибудь терминал типа guake, а длинные горячие клавиши как правило не переопределяют.
                          –1
                          На маке и линуксе это не работает.
                            +1
                            Хм, Mint 15 и F12 работает, но на ноутбуке неудобно из-за Fn
                          +6
                          судя по видео, это не hotkey. Там приглашают нажать J в строке адреса страницы, а через CTRL^V вставить содержимое буфера обмена. Скорее всего «j» им нужна как первая буква javascript, чтоб «javascript:» явно не фигурировал в копируемом тексте (может на это есть защита).
                            +1
                            В Chrome при попытке вставить в адресную строку что-либо, начинающееся на «javascript:» (например, "javascript:alert(1);"), начало строки автоматически обрежется (останется только "alert(1);").
                            Возможно, что-то подобное есть и в Safari.
                          +4
                          если посмотреть видео, то виодно что в буффере обмена ссылка типа «avascript://code here», и просьба, мол выдели адресную строку целиком, нажми j, и ctrl+V, enter. получается «javascript://code» который радостно исполниться ) приему 100 лет в обед, но я даже не думал что его можно так использовать :)
                          +2
                          Интересная задача — защититься от выполнения пользователем произвольного кода.
                          HttpOnly-куки, не оставлять ничего в глобальном скоупе, все AJAX-запросы только с одноразовыми токенами?
                            0
                            Как оно, в принципе, и должно быть и так.
                              0
                              ВКонтакте так не думает. По крайней мере по части глобальных переменных точно.
                                +14
                                Во вконтакте, кстати, довольно увлекательная консоль.
                                Сидишь и прямо видишь, как жизнь протекает мимо.
                              +1
                              JS это не совсем тот язык где можно быть уверенным что получив доступ к консоли хоть что-то останется тайной. Тут мы подменяем Function.call и врываемся в самые глубокие скоупы. Это можно избежать, если хитро написать код, но там очень много мест куда так можно ворваться. Можно Number.toString\valueOf подменить на функцию, которая будет попутно смотреть кто её позвал и запоминать — это уже будут внутренности скоупа.
                                0
                                если хитро написать код
                                Что-нибудь типа такого?

                                while((Function.call+'').replace(/\n| /g, '') != "functioncall(){[nativecode]}");
                                
                                  0
                                  Тоже можно обойти через
                                  Function.call.toString=function(){return "function call() { [native code] }"}
                                  
                                    0
                                    Проверять Function.call.toString == Function.call.toString.toString :)
                                      +5
                                      Заменить Function.prototype.toString…
                                        +3
                                        Сдаюсь.
                                          0
                                          кстати да, сам над этой проблемой работал.

                                          Я хотел разработать защиту от кликджекинга на уровне JS — считывать opacity и z-index, отсылать их фрейму через постмессаж + nonce спрятанная внутри моего замыкания. Пришел к выводу что придется постоянно сверять toString+'' и нет гарантий что енвайромент не изменен
                                0
                                Это же далеко не всегда поможет: можно взять конкретную кнопку на странице и сделать onclick. И как отличать, нажали мышкой/по enter/по хоткею или же «программным» образом?
                                  0
                                  можно пытаться отлавливать координаты мыши в момент клика(видел в одной браузерке), программный клик вроде бы не оставляет таких следов
                                    0
                                    оставляет, можно свой евент добавить, и заполнить его любые поля
                                    0
                                    Ну, штучно лайки проставлять — это не так страшно, как угон аккаунтов и спам.
                                  0
                                  Так, наверно, и AdBlock можно обойти?
                                    0
                                    AdBlock (Plus) можно купить.

                                    Web Console в Firefox на facebook работает, в том числе автодополнение.
                                    +2
                                    Пример подобной self xss, от которых они думают защищаться: bugscollector.com/db/facebook.com/90/
                                      0
                                      А всё таки, как же они блокируют консоль где-то кроме Хрома? Если я правильно понял, то console._commandLineAPI только для хрома подходит(command line api)
                                        0
                                        Кстати, да
                                        +2
                                        Не понимаю как это может помочь пользователям. Ну не будет доступа в консоль, ни чего не помешает, так же попросить ввести в адресную строку нечто вроде: javascript:, и этот код будет выполнен.
                                        Но и это имхо слишком сложно для пользователя, куда проще, попросить добавить в закладки такую строчку, а потом просто кликнуть по ней на нужной странице. Вот примерно так: jsfiddle.net/q9atS/1/embedded/result/

                                        Так что необходимость такой «защиты» весьма сомнительна.

                                        ап. посмотрел видео, там о том же и говорят.
                                          0
                                          Ввод javascript (по крайней мере, вставка из буфера), вроде бы, в большинстве современных браузеров уже «сломана»?
                                            0
                                              0
                                              да, но Internet Explorer проверяет содержимое адресной строки после вставки текста, поэтому там надо сначала вставить текст без первой j, потом нажать
                                              0
                                              Да, при вставке из буфера javascript вырезается, но вот при клике по закладке все работает как надо.
                                              Проверял в Chrome 30.0.1599.66
                                                0
                                                Когда же они успели-то? Казалось бы, совсем недавно так делал…
                                              0
                                              Почему-то вспомнил про «ALT+F4» в онлайн играх (CS, WoT), перед игрой в чатах писали, что это супер фишка, режим бога, скорее нажимайте! И было видно как люди уходили в оффлайн, нажимая кнопки.
                                                0
                                                Ну, Alt+F4 особо вредной нагрузки не несет. Надо быть полным идиотом, чтобы сделать так два раза — а один раз никому сильно не повредит. Разве что во время турнира… Хотя, все же некоторое сходство с описанными атаками тут и правда есть.
                                                0
                                                Спасибо за шорткат Ctrl+Shift+J — не знал.
                                                А для хрома есть какие расширения (в магазин не нашёл) позволяющие добавить хоткеи- вот например закрытие вкладки по F4 (а не по Alt+F4)- чтоб быстрее и пальцы лишний раз не корячить?
                                                  +1
                                                  Все-таки ctrl+f4 :-) Есть еще проще — ctrl+w, с ним пальцы сложно поломать
                                                  0
                                                  Один из инженеров Facebook сообщил на Stackoverflow, что отключение всей консоли произошло по ошибке. Предполагалось, что нововведение поможет бороться с одним из методов социальной инженерии: stackoverflow.com/a/21693931
                                                    +1
                                                    Увидел, что в посте об этом и написано. Посыпаю голову пеплом.

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

                                                  Самое читаемое