Как отключить js в консоли браузера
У меня в Chrome открылась случайная интернет-страница. Я открываю его с включенным JavaScript, так как мне нужно выполнить некоторые скрипты.
Чем с какого-то момента я хочу остановить выполнение скрипта, поэтому никакие таймеры или обработчики событий не должны запускаться. Конечно, использование бесконечного цикла не нормально, так как я хочу, чтобы страница была отзывчивой.
Как я могу этого добиться?
Следующий код частично делает то, что мне нужно
- Прослушиватели событий для document и обратных вызовов ajax выживут
- Это вызывает синтаксический анализ html, поэтому некоторая неверная разметка может быть изменена при разборе
Также я надеюсь, что есть какой-то способ сделать это через devtools, не взаимодействуя с кодом страницы.
PS: если мне нужно использовать другой браузер, это нормально.
2 ответа
Вы можете включить / отключить JavaScript на странице в любой момент, используя командное меню в DevTools. Вы можете получить доступ к этому меню, используя Cmd + Shift + P (Mac) или Ctrl + Shift + P (Windows / Linux).
Начните вводить Disable JavaScript и нажмите Enter , чтобы отключить выполнение скрипта.
В следующем примере я запустил асинхронный таймер, чтобы регистрировать добавочный счет каждые 500 мс. После отключения JavaScript выполнение было приостановлено и больше ничего не регистрировалось на консоли.
Позже я снова включил JavaScript, набрав «Включить JavaScript» и нажав Enter . После этого выполнение продолжилось, и таймер продолжил с того места, где он остановился.
Примечание. . Любой синхронный код, все еще работающий при попытке отключить JavaScript, не будет уничтожен. Это закончится, а затем дальнейшее выполнение будет отключено.
Добавление к Гидеону Пизеру:
Shift-Ctrl-I - дождитесь открытия devTools,
затем Shift-Ctrl-P - если вы не ждете: откроется диалоговое окно печати .
затем - см. ответ Гидеона Пизера.
Я пытаюсь отладить функции веб-сайта, когда пользователи отключают свой JavaScript. Мне было интересно, Как отключить JavaScript для страницы из Google Chrome devtools?
выберите ⋮ меню в углу инструментов разработчика, нажмите кнопку Настройки, затем проверьте Disable Javascript .
Chrome был обновлен после этого ответа. Теперь вам нужно нажать кнопку ⋮ в правом верхнем углу, затем "Настройки (F1) -> отладчик -> отключить JavaScript", чтобы добраться до этой опции.
- Инструменты Разработчика (F12) В
- три вертикальные точки в правом верхнем углу
- настройки
- на вкладке "Настройки" слева
- будет раздел "отладчик" с опцией (возможно, справа)
теперь в DevTools встроено командное меню, которое упрощает отключение JavaScript. Это было примерно с апреля 2016 года или около того.
- Открыть DevTools.
- пресс команда + Shift + P (Mac) или управления + Shift + P (Windows, Linux), чтобы открыть меню команд. Убедитесь, что курсор сфокусирован на окне DevTools, а не на браузере область просмотра.
- тип Disable JavaScript (или нечто подобное. это нечеткий поиск), а затем нажмите Enter .
использовать когда вы хотите включить его обратно.
chrome://chrome/settings/content Javascript / Управление Исключениями
Это расширение делает его быстрее : Быстрый Javascript Switcher
вы также можете запустить Chrome с отключенным JavaScript по умолчанию, используя флаг:
вы могли бы использовать это, например, запустив Chrome следующим образом:
на OSX мне пришлось щелкнуть тройные вертикальные точки и снять флажок в разделе настроек. Который также можно открыть с помощью f1
самый быстрый способ, вероятно, это:
- F12, чтобы открыть консоль разработчика
- ctrl + shift + p, чтобы открыть командный инструмент (windows)
- введите "отключить javascript" и нажмите enter
- перейти к опции (окна: три вертикальные точки в правом верхнем углу) - > Настройки, или нажмите F1.
- В общем разделе вы найдете "отключить JavaScript"
значок шестеренки больше не является частью средства разработчика. Поскольку Chome 30.0 даже невозможно вернуть его (в Google Chrome Developer Tools значки на панели инструментов исчезли. Что происходит?)
использование только клавиатуры по крайней мере для Windows 10:
- F12 , показывает инструменты разработчика
- F1 показывает параметры
- tab , переходит к флажку "отключить Javascript"
- пробел переключает опцию
- esc , скрывает параметры
чтобы временно заблокировать JavaScript в домене:
- Нажмите Меню ⋮ в углу инструментов разработчика, нажмите Настройки
- нажмите "Дополнительно" внизу
- нажмите на Настройки контента
- нажмите на JavaScript
- выключить
вставьте его: chrome:/ / настройки / содержимое
перейдите в раздел "Javascript" и отключите его.
и там вы можете вставить URL вашего сайта в Manage exceptions.. и измените приоритет JavaScript с ALLOW на BLOCK.
быстрый способ:
1) просто нажмите на кнопку CTRL + SHIFT + P
2) заполните поле тремя буквами dis и появится это поле и выберите пункт Отключить Javascript
Я работаю над веб-приложением в HTML / JavaScript, и я хочу, чтобы пользователи не вызывали функции в своей консоли браузера, чтобы избежать обмана. Все эти функции содержатся в уникальном файле под названием functions.js который загружается в голову .
после поиска в Интернете я нашел это решение, которое отлично работает в Google Chrome, но неэффективно в других браузерах, таких как Firefox:
есть ли общий способ отключить вызов функций из консоли? Зависит ли это от браузера или это просто проблема области или, может быть, что-то еще, что я проигнорировал?
есть ли общий способ отключить вызов функций из консоли?
нет. там нет:никогда. ну, по-видимому, Facebook нашел способ в Google Chrome сделать это:как Facebook отключает встроенные инструменты разработчика браузера? - хотя, я бы счел это ошибкой: -)
может быть, это что-то еще, что я проигнорировал?
да. JavaScript выполняется на стороне клиента, а клиент имеет полную власть над ним. Он может выбрать, выполнять его или нет, как его выполнять и изменять его, как он хочет, прежде чем выполнять его. Современные инструменты разработчика позволяют пользователю выполнять произвольные функции в произвольных областях при отладке скрипта.
вы можете затруднить интроспекцию и использование (вызов) кода, избегая выставлять свои методы в глобальной области и запутывая (уменьшая) источник. Однако никогда не доверяйте клиенту. Чтобы избежать обмана, вам придется выполните все важные задачи на сервере. И не ожидайте, что все запросы будут поступать из вашего кода JavaScript или из браузера вообще; вам нужно будет обрабатывать произвольные запросы, которые могут быть выданы каким-то ботом.
Minify ваш источник JavaScript, чтобы запутать любой смысл. Это не сделает невозможным мошенничество, но очень трудно найти способы обмануть.
Если вы хотите избежать "обмана", вам понадобится проверка на стороне сервера пользовательского ввода. Клиент может отправлять информацию о сервере только в соответствии с протоколом, определенным на стороне сервера, и, следовательно, обман невозможен, если ваш протокол не имеет утечек безопасности (и большинство протоколов, особенно новые протоколы).
песочницы, такие как Facebook API, Google Caja и более позволяют произвольно применять любые ограничения, "переписывая" язык (они запускают парсер и в основном повторно компилируют пользовательский код и делают все, что небезопасно, безопасным). Это работает до тех пор, пока вы можете убедиться, что пользовательский код может работать только в этих средах. Таким образом, код от других пользователей не может связываться с вашим клиентом, но вы, конечно, можете связываться со своим собственным клиентом.
По-видимому, из-за недавних мошеннических действий инструменты разработчика используются людьми для размещения спама и даже используются для «взлома» учетных записей. Facebook заблокировал инструменты разработчика, и я даже не могу использовать консоль.
Просто зайдите на Facebook и откройте инструменты разработчика, введите один символ в консоли, и появится это предупреждение. Неважно, что вы вставите, оно не будет выполнено.
Как это возможно?
Они даже заблокировали автозаполнение в консоли:
Я инженер по безопасности в Facebook, и это моя вина. Мы тестируем это для некоторых пользователей, чтобы увидеть, может ли оно замедлить некоторые атаки, когда пользователи обмануты вставляют (вредоносный) код JavaScript в консоль браузера.
Просто чтобы прояснить: попытка заблокировать хакеров на стороне клиента - плохая идея в целом; Это необходимо для защиты от конкретной атаки социальной инженерии.
Если вы попали в тестовую группу и вас это раздражает, извините. Я пытался сделать старую страницу отказа (теперь страница справки) максимально простой, но при этом оставаясь пугающей достаточно, чтобы остановить хотя бы некоторых жертв.
Фактический код очень похож на ссылку @ joeldixon66; у нас это немного сложнее без веской причины.
Chrome оборачивает весь консольный код в
. поэтому сайт переопределяет console._commandLineAPI , чтобы бросить:
Эпилог: команда Chrome решила, что победа над консолью от JS на стороне пользователя была ошибкой и исправил проблему, сделав эту технику недействительной. После этого была добавлена дополнительная защита для защиты пользователей от самообороны xss .
Chrome сильно изменился с тех пор, как Facebook мог отключить консоль .
По состоянию на март 2017 года это больше не работает.
Лучшее, что вы можете сделать, это отключить некоторые функции консоли, например:
Netflix также реализует эту функцию
Они просто переопределяют console._commandLineAPI , чтобы выдать ошибку безопасности.
Это действительно возможно, так как Facebook смог это сделать. Ну, не фактические инструменты веб-разработчика, а выполнение Javascript в консоли.
Это действительно мало что даст, поскольку существуют другие способы обойти этот тип безопасности на стороне клиента.
Когда вы говорите, что это на стороне клиента, это происходит вне контроля сервера, поэтому вы ничего не можете с этим поделать. Если вы спрашиваете, почему Facebook все еще делает это, это не для безопасности, а для защиты обычных пользователей, которые не знают JavaScript, от запуска кода (который они не умеют читать) в консоли. Это часто встречается на сайтах, которые обещают услугу авто-лайкера или других ботов функциональности Facebook после того, как вы делаете то, что они просят вас сделать, где в большинстве случаев они дают вам кусочек javascript для запуска в консоли.
Если у вас не так много пользователей, как в Facebook, то я не думаю, что нужно делать то, что делает Facebook.
Даже если вы отключите JavaScript в консоли, запуск JavaScript через адресную строку все еще возможен.
И если браузер отключает JavaScript в адресной строке (когда вы вставляете код в адресную строку в Google Chrome, он удаляет фразу «javascript:»), вставка JavaScript в одну из ссылок с помощью элемента inspect все еще возможна.
Осмотрите якорь.
Вставьте код в href:
Суть в том, что проверка на стороне сервера должна выполняться в первую очередь, а затем - на стороне клиента.
Я не мог заставить это вызвать это на любой странице. Более надежная версия этого сделает это:
Я нашел сценарий с консолью Facebook, используя инструменты разработчика Chrome. Вот скрипт с небольшими изменениями для удобства чтения. Я удалил биты, которые я не мог понять:
При этом автоматическое завершение консоли происходит молча, а операторы, введенные в консоли, не будут выполняться (исключение будет записано в журнал).
Мой простой способ, но это может помочь для дальнейших вариаций на эту тему. Перечислите все методы и измените их на бесполезные.
Я бы пошел по пути:
Это не является мерой безопасности для слабого кода, оставляемого без присмотра. Всегда находите постоянное решение для слабого кода и правильно защищайте свои сайты, прежде чем внедрять эту стратегию
Насколько мне известно, лучшим инструментом было бы добавление нескольких файлов javascript, которые просто возвращают целостность страницы в нормальное состояние путем обновления или замены содержимого. Отключение этого инструмента разработчика не будет лучшей идеей, поскольку обход всегда ставится под сомнение, поскольку код является частью браузера, а не рендеринга сервера, поэтому его можно взломать.
Если у вас есть js file one проверка на изменения <element> важных элементов и js file two и js file three проверка того, что этот файл существует за период, у вас будет полное восстановление целостности на странице в течение периода ,
Давайте возьмем пример из 4 файлов и покажем, что я имею в виду.
Теперь это просто для того, чтобы показать, что он работает на всех файлах и тегах, а также
Если вы соберете все эти файлы вместе и создадите пример, вы увидите функцию этой меры. Это предотвратит некоторые непредвиденные инъекции, если вы правильно его внедрите во все важные элементы вашего индексного файла, особенно при работе с PHP.
Почему я выбрал перезагрузку вместо возврата к нормальному значению для каждого атрибута, так это то, что некоторые злоумышленники могут настроить и подготовить другую часть веб-сайта, что уменьшает объем кода. Перезагрузка уберет всю тяжелую работу атакующего, и он, вероятно, пойдет играть куда-нибудь попроще.
Еще одно примечание: Это может стать большим количеством кода, поэтому держите его в чистоте и не забудьте добавить определения того, где они принадлежат, чтобы облегчить редактирование в будущем. Также установите желаемое количество секунд, так как интервалы в 1 секунду на больших страницах могут иметь серьезные последствия на старых компьютерах, которые ваши посетители могут использовать .
Внутренне devtools внедряет IIFE с именем getCompletions на страницу, вызываемую при нажатии клавиши внутри консоли Devtools.
Глядя на источник этой функции, он использует несколько глобальных функций, которые можно перезаписать.
Используя Error конструктор можно получить стек вызовов, который будет включать getCompletions при вызове Devtools.
Помимо переопределения console._commandLineAPI , Есть и другие способы проникнуть в InjectedScriptHost в браузерах WebKit, чтобы предотвратить или изменить оценку выражений, введенных в консоль разработчика.
Chrome исправил это в прошлом выпуске. - это должно было быть до февраля 2015 года, поскольку я создал суть в то время
Так что вот еще одна возможность. На этот раз мы подключаемся на уровень выше непосредственно к InjectedScript , а не к InjectedScriptHost , в отличие от предыдущей версии.
Это довольно приятно, так как вы можете напрямую подключить патч InjectedScript._evaluateAndWrap вместо того, чтобы полагаться на InjectedScriptHost.evaluate , поскольку это дает вам более детальный контроль над тем, что должно произойти.
Еще одна довольно интересная вещь заключается в том, что мы можем перехватить внутренний результат при вычислении выражения и вернуть его пользователю вместо нормального поведения.
Вот код, который делает именно это, возвращает внутренний результат, когда пользователь что-то оценивает в консоли.
Это немного многословно, но я подумала, что добавлю несколько комментариев
Поэтому обычно, если пользователь, например, оценивает [1,2,3,4] , вы ожидаете следующий результат:
После того, как monkeypatching InjectedScript._evaluateAndWrap оценивает то же самое выражение, выдает следующий вывод:
Как вы видите, маленькая левая стрелка, указывающая на вывод, все еще там, но на этот раз мы получаем объект. Где результат выражения, массив [1,2,3,4] представляется как объект со всеми описанными его свойствами.
Я рекомендую попытаться оценить это и то выражение, в том числе те, которые вызывают ошибки. Это довольно интересно.
Кроме того, взгляните на объект is - InjectedScriptHost - . Он предоставляет некоторые методы, с которыми можно поиграть и получить представление о внутренностях инспектора.
Конечно, вы можете перехватить всю эту информацию и все равно вернуть исходный результат пользователю.
Просто замените оператор возврата в пути else на console.log (res) после return res . Тогда вы получите следующее.
Это предыдущая версия, которая была исправлена Google. Следовательно, это уже невозможно.
Один из них подключается к Function.prototype.call
Chrome оценивает введенное выражение путем call его функции eval с InjectedScriptHost как thisArg
var result = evalFunction.call(object, expression);
Учитывая это, вы можете прослушать thisArg из call , являющегося evaluate , и получить ссылку на первый аргумент ( InjectedScriptHost )
Вы могли бы, например, сгенерируйте ошибку, чтобы оценка была отклонена.
Вот пример, где введенное выражение передается компилятору CoffeeScript перед передачей его > функция.
Читайте также: