Таким образом, очевидно, что из-за недавних мошенничеств люди используют средства разработчика для размещения спама и даже используют для взлома учетных записей. Facebook заблокировал инструменты разработчика, и я даже не могу использовать консоль.
Как они это сделали ?? В одном сообщении о переполнении стека утверждалось, что это невозможно , но Facebook доказал их неправоту.
Просто зайдите на Facebook и откройте инструменты разработчика, введите один символ в консоль, и появится это предупреждение. Неважно, что вы вставите, оно не будет выполнено.
Как это возможно?
Они даже заблокировали автозаполнение в консоли:
javascript
facebook
google-chrome-devtools
Дерек 朕 會 功夫
источник
источник
Ответы:
Я инженер по безопасности в Facebook, и это моя вина. Мы тестируем это для некоторых пользователей, чтобы увидеть, может ли это замедлить некоторые атаки, когда пользователи обмануты вставляют (вредоносный) код JavaScript в консоль браузера.
Просто чтобы быть ясно: попытка заблокировать хакеров на стороне клиента - это плохая идея в целом; это для защиты от конкретной атаки социальной инженерии .
Если вы попали в тестовую группу и вас это раздражает, извините. Я пытался сделать старую страницу отказа (теперь страницу помощи ) настолько простой, насколько это возможно, при этом оставаясь достаточно страшной, чтобы остановить хотя бы некоторых жертв.
Фактический код очень похож на ссылку @ joeldixon66 ; У нас это немного сложнее без веской причины.
Chrome оборачивает весь консольный код в
... так сайт переопределяет,
console._commandLineAPI
чтобы бросить:Этого не достаточно (попробуйте!) , Но это главный трюк.
Эпилог: Команда Chrome решила, что победа над консолью от JS на стороне пользователя была ошибкой, и исправила проблему , сделав эту технику недействительной. После этого была добавлена дополнительная защита для защиты пользователей от self-xss .
источник
console.log
.Я нашел сценарий с настройками консоли Facebook, используя инструменты разработчика Chrome. Вот скрипт с небольшими изменениями для удобства чтения. Я удалил биты, которые я не мог понять:
При этом автоматическое завершение консоли происходит молча, а операторы, введенные в консоли, не будут выполняться (исключение будет записано в журнал).
Ссылки:
источник
Я не мог заставить это вызвать это на любой странице. Более надежная версия этого сделает это:
Чтобы оформить вывод: Цвета в консоли JavaScript
Изменить мышление @ joeldixon66 имеет право идея: выполнение Отключить JavaScript из консоли «::: Kspace :::
источник
window.console.log = function(){//empty}
и используйте console.logПомимо переопределения
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)
следующим areturn res
. Тогда вы получите следующее.Конец Правки
Это предыдущая версия, которая была исправлена Google. Следовательно, это больше невозможно.
Один из них подключается кFunction.prototype.call
Chrome оценивает введенное выражение, используяcall
его функцию evalInjectedScriptHost
какthisArg
var result = evalFunction.call(object, expression);
Учитывая это, вы можете слушать к
thisArg
изcall
существevaluate
и получить ссылку на первый аргумент (InjectedScriptHost
)Например, вы можете выдать ошибку, что оценка была отклонена.
Вот пример, где введенное выражение передается компилятору CoffeeScript перед передачей его
evaluate
функции.источник
Netflix также реализует эту функцию
Они просто отменяют
console._commandLineAPI
ошибку безопасности.источник
Это на самом деле возможно, так как Facebook смог это сделать. Ну, не фактические инструменты веб-разработчика, а выполнение Javascript в консоли.
Смотрите это: Как Facebook отключает встроенные в браузер Инструменты разработчика?
Это действительно мало что даст, поскольку существуют другие способы обойти этот тип безопасности на стороне клиента.
Когда вы говорите, что это на стороне клиента, это происходит вне контроля сервера, поэтому вы ничего не можете с этим поделать. Если вы спрашиваете, почему Facebook все еще делает это, это не для безопасности, а для защиты обычных пользователей, которые не знают JavaScript, от запуска кода (который они не умеют читать) в консоли. Это часто встречается на сайтах, которые обещают услугу авто-лайкера или других ботов функциональности Facebook после того, как вы делаете то, что они просят вас сделать, где в большинстве случаев они дают вам кусочек javascript для запуска в консоли.
Если у вас не так много пользователей, как в Facebook, то я не думаю, что нужно делать то, что делает Facebook.
Даже если вы отключите JavaScript в консоли, запуск JavaScript через адресную строку все еще возможен.
и если браузер отключает JavaScript в адресной строке (когда вы вставляете код в адресную строку в Google Chrome, он удаляет фразу «javascript:»), вставка JavaScript в одну из ссылок с помощью элемента inspect все еще возможна.
Осмотрите якорь:
Вставьте код в href:
Суть в том, что проверка на стороне сервера должна выполняться в первую очередь, а затем - на стороне клиента.
источник
Chrome сильно изменился с тех пор, как Facebook мог отключить консоль ...
По состоянию на март 2017 года это больше не работает.
Лучшее, что вы можете сделать, это отключить некоторые функции консоли, например:
источник
Мой простой способ, но это может помочь для дальнейших вариаций на эту тему. Перечислите все методы и измените их на бесполезные.
источник
Внутренне devtools внедряет имя IIFE
getCompletions
на страницу, вызываемое при нажатии клавиши внутри консоли Devtools.Глядя на источник этой функции , он использует несколько глобальных функций, которые могут быть перезаписаны.
Используя
Error
конструктор, можно получить стек вызовов, который будет включенgetCompletions
при вызове Devtools.Пример:
источник
простое решение!
источник
console.log()
?console.log()
больше не имеет значения, когда консоль постоянно очищается :)Я бы пошел по пути:
источник
Это не мера безопасности для того, чтобы слабый код оставляли без присмотра. Всегда находите постоянное решение для слабого кода и правильно защищайте свои сайты, прежде чем применять эту стратегию
Насколько мне известно, лучшим инструментом было бы добавление нескольких файлов javascript, которые просто возвращают целостность страницы в нормальное состояние путем обновления или замены содержимого. Отключение этого инструмента разработчика не будет лучшей идеей, поскольку обход всегда ставится под сомнение, поскольку код является частью браузера, а не рендеринга сервера, поэтому его можно взломать.
Если у вас есть
js file one
проверка на<element>
изменения важных элементов иjs file two
иjs file three
проверки того, что этот файл существует в период вы будете иметь полную целостность восстановить на странице в течение периода.Давайте возьмем пример из 4 файлов и покажем, что я имею в виду.
index.html
mainfile.js
ps.js
ks.js
style.css
Теперь это просто для того, чтобы показать, что он работает на всех файлах и тегах, а также
Если вы соберете все эти файлы вместе и создадите пример, вы увидите функцию этой меры. Это предотвратит некоторые непредвиденные инъекции, если вы правильно его внедрите во все важные элементы вашего индексного файла, особенно при работе с PHP.
Почему я выбрал перезагрузку вместо возврата к нормальному значению для атрибута, так это то, что у некоторых злоумышленников уже есть другая часть веб-сайта, уже настроенная и готовая, и это уменьшает объем кода. Перезагрузка уберет всю тяжелую работу атакующего, и он, вероятно, пойдет играть куда-нибудь попроще.
Еще одно примечание: это может стать большим количеством кода, так что держите его в чистоте и не забудьте добавить определения того, где они принадлежат, чтобы облегчить редактирование в будущем. Также установите желаемое количество секунд, так как 1-секундные интервалы на больших страницах могут иметь серьезные последствия на старых компьютерах, которые могут использовать ваши посетители.
источник