Как отключить инструменты разработчика браузера?
В настоящее время я занимаюсь разработкой веб-приложения, и, поскольку оно имеет доступ к базе данных внизу, мне требуется возможность отключить инструменты разработчика из Safari, Chrome, Firefox и Internet Explorer, а также Firebug в Firefox и всех подобных приложений. Есть ли способ сделать это?
Примечание. Платформа AJAX, предоставляемая базой данных, требует, чтобы все, что дано базе данных, содержало веб-параметры, которые можно было изменить, и чтобы все, что она возвращает, обрабатывалось в JavaScript. Поэтому, когда он возвращает значение, например, имеет ли пользователь доступ к определенной части веб-сайта, оно должно обрабатываться в JavaScript, к которому инструменты разработчика могут получить доступ в любом случае. Так что это обязательно.
ОБНОВЛЕНИЕ: Для тех из вас, кто все еще думает, что я делаю плохие предположения, я спросил продавца. Ниже их ответ:
Вот несколько советов о том, как снизить риск:
1) Используйте Обфускатор JavaScript, чтобы запутать код и предоставить только запутанную версию с проданным приложением; оставьте не запутанную версию для себя, чтобы вносить изменения. Вот онлайн-обфускатор: Как я могу запутать (защитить) JavaScript? http://en.wikipedia.org/wiki/Obfuscated_code http://javascriptobfuscator.com/default.aspx
2) Используйте менее описательное имя; может быть, "repeattasks.js" вместо "security.js" в качестве "security.js", вероятно, будет больше выделяться тем, кто рассматривает информацию такого типа как нечто важное.
19 ответов
Нет, ты не можешь этого сделать.
Меню разработчика находится на стороне клиента и предоставляется браузером пользователя.
Кроме того, разработчик браузера не должен иметь ничего общего с кодом вашей базы данных на стороне сервера, и если это произойдет, вам понадобится небольшая реструктуризация.
Если ваш фреймворк требует авторизации в клиенте, то...
Вы должны изменить свои рамки
Когда вы помещаете приложение в дикую природу, где пользователи, которым вы не доверяете, могут получить к нему доступ; Вы должны нарисовать линию на песке.
- Физическое оборудование, которым вы владеете; и может запереть за сильной дверью. Вы можете делать все что угодно здесь; Это отличное место для хранения вашей базы данных и выполнения функций авторизации, чтобы решить, кто может что-то делать с вашей базой данных.
- Все остальное; Включая браузеры на клиентских компьютерах; мобильные телефоны; Удобные киоски расположены в вестибюле вашего офиса. Вы не можете доверять этим! Когда-либо! Вы ничего не можете сделать, это означает, что вы можете быть полностью уверены, что эти машины не лгут, чтобы обмануть вас и ваших клиентов без денег. Вы не контролируете это, поэтому вы не можете надеяться узнать, что происходит.
На самом деле это как-то возможно ( /questions/14644740/kak-facebook-otklyuchaet-vstroennyie-v-brauzer-instrumentyi-razrabotchika), но это ужасно плохая идея для защиты ваших данных. Атакующий может всегда использовать другие (открытые, самостоятельно написанные) движки, которые вы не можете контролировать. Даже обфускация javascript может только замедлить взлом вашего приложения, но также практически не обеспечивает безопасности.
Единственный разумный способ защитить ваши данные - это написать безопасный код на стороне сервера. И помните, что если вы позволите кому-то загрузить некоторые данные, он сможет делать с ними все, что захочет.
Ваша среда разработки никоим образом не будет настолько умопомрачительной. Этого просто не может быть.
Я настоятельно рекомендую по электронной почте вашему боссу:
- Требование на неделю или две в графике обучения / обучения.
- Требование достаточного количества билетов в службу поддержки у вашего поставщика, чтобы выяснить, как выполнить проверку на стороне сервера.
- Явное предупреждение о том, что если инструмент не может выполнить проверку на стороне сервера, вы будете смеяться над первой страницей Wall Street Journal, когда вся ваша база данных будет утечка / уничтожена / и т.д.
Нет. Невозможно отключить Инструменты разработчика для ваших конечных пользователей.
Если ваше приложение небезопасно, если у пользователя есть доступ к инструментам разработчика, то оно просто небезопасно.
Не забывайте об инструментах, таких как Fiddler. Если даже если вы заблокируете все консоли браузера, запросы HTTP могут быть изменены на клиенте, даже если вы используете HTTPS. Fiddler может захватывать запросы из браузера, пользователь может изменять его и воспроизводить с вредоносным вводом. Если вы не защитите свои запросы AJAX, но я не знаю, как это сделать.
Просто не доверяйте никаким данным, полученным от любого браузера.
Не может отключить инструмент разработчика. но вы можете раздражать любого, кто пытается использовать инструмент разработчика на вашем сайте, попробуйте взорвать коды javascript, коды будут постоянно ломаться.
(function () {
(function a() {
try {
(function b(i) {
if (('' + (i / i)).length !== 1 || i % 20 === 0) {
(function () { }).constructor('debugger')()
} else {
debugger
}
b(++i)
}
)(0)
} catch (e) {
setTimeout(a, 5000)
}
}
)()
}
)();
Обновление в то время (2015), когда этот ответ был опубликован, этот трюк был возможен. Сейчас (2017) браузеры уже зрелые. Следующий трюк больше не работает!
Да, это возможно. Chrome переносит весь консольный код в
with ((console && console._commandLineAPI) || {}) {
<code goes here>
}
... так что сайт переопределяет console._commandLineAPI
бросать:
Object.defineProperty(console, '_commandLineAPI',
{ get : function() { throw 'Nooo!' } })
Это главный трюк!
https://github.com/theajack/disable-devtool
Этот инструмент просто отключил devtools, обнаружив, что он открыт, а затем просто закрыл окно! Очень красивая альтернатива. Слава создателю.
Вы не можете заблокировать инструменты разработчика, но можете попытаться помешать пользователю войти в него. Вы можете попробовать настроить контекстное меню и заблокировать нажатия клавиш для инструментов разработчика.
$('body').keydown(function(e) {
if(e.which==123){
e.preventDefault();
}
if(e.ctrlKey && e.shiftKey && e.which == 73){
e.preventDefault();
}
if(e.ctrlKey && e.shiftKey && e.which == 75){
e.preventDefault();
}
if(e.ctrlKey && e.shiftKey && e.which == 67){
e.preventDefault();
}
if(e.ctrlKey && e.shiftKey && e.which == 74){
e.preventDefault();
}
});
!function() {
function detectDevTool(allow) {
if(isNaN(+allow)) allow = 100;
var start = +new Date();
debugger;
var end = +new Date();
if(isNaN(start) || isNaN(end) || end - start > allow) {
console.log('DEVTOOLS detected '+allow);
}
}
if(window.attachEvent) {
if (document.readyState === "complete" || document.readyState === "interactive") {
detectDevTool();
window.attachEvent('onresize', detectDevTool);
window.attachEvent('onmousemove', detectDevTool);
window.attachEvent('onfocus', detectDevTool);
window.attachEvent('onblur', detectDevTool);
} else {
setTimeout(argument.callee, 0);
}
} else {
window.addEventListener('load', detectDevTool);
window.addEventListener('resize', detectDevTool);
window.addEventListener('mousemove', detectDevTool);
window.addEventListener('focus', detectDevTool);
window.addEventListener('blur', detectDevTool);
}
}();
Я нашел способ, ты можешь использовать debugger
ключевое слово для остановки работы страницы, когда пользователи открывают инструменты разработчика
(function(){
debugger
}())
Я просто бросаю случайную идею, может быть, это поможет.
If someone tries to open the developer tool just redirect to some other site.
Я не знаю, насколько это будет эффективно для вас, но, по крайней мере, они не смогут что-то сделать на вашем сайте.
Да, это ужасный дизайн, и вы не можете отключить инструменты разработчика. Пользовательский интерфейс на стороне клиента должен располагаться поверх API отдыха, разработанного таким образом, чтобы пользователь в любом случае не мог изменить что-либо, что уже было действительным вводом.
Вам нужна проверка входных данных на стороне сервера. Проверка на стороне сервера не должна быть многословной и насыщенной, она должна быть полной.
Так, например, на стороне клиента у вас может быть пользовательский интерфейс для отображения обязательных полей и т. Д. Но на стороне сервера вы можете просто установить одно логическое значение на true и установить его на false, если поле не проходит проверку, а затем отклонить весь запрос.
Кроме того, ваше клиентское приложение должно быть аутентифицировано. Вы можете сделать это 100 тысячами способов. Но мне нравится использовать сквозную аутентификацию ADFS. Они входят на сайт через adfs, который генерирует им сеансовые куки. Этот файл cookie сеанса передается остальному api (все в том же домене), и мы аутентифицируем запросы к остальному api через этот файл cookie сеанса. Таким образом, никто, кто не вошел в систему через окно входа, не сможет вызвать остальные api. Его можно вызвать только из контекста браузера.
Что касается инструмента разработчика, вам необходимо разработать свое приложение таким образом, чтобы все, что пользователь мог делать в консоли разработчика, было просто (функцией) или неисправностью. То есть говорят, что они заполняют все поля фрагментом js, неважно, это правильный ввод. Скажем, они переопределяют скрипт и пытаются отправить неверные данные в вызовы API. Не имеет значения, проверка на стороне сервера отклонит любой неверный ввод.
По сути, создавайте свое приложение таким образом, чтобы ненужные инструменты разработчика либо тормозили их опыт (так как это не сработает), либо позволяли им немного облегчить себе жизнь, например, каждый раз автоматически выбирая страну.
Кроме того, вы даже не рассматриваете расширения... Расширения могут делать все и вся, что может делать консоль разработчика...
Вы не можете отключить инструменты разработчика
Однако...
Я видел, как один веб-сайт использует простой трюк, чтобы сделать devtools непригодным для использования. Это работало так — когда пользователь открывает devtools, вся страница превращается в пустую страницу, а отладчик в devtools зацикливается на точке останова. Даже обновление страницы не выводит вас из этого состояния.
Да. Никто не может управлять браузером клиента или отключить инструмент разработчика или инструмент отладчика.
Но вы можете создать настольное приложение с электронным файлом .js, в котором вы сможете запустить свой веб-сайт. Где можно остановить отладчик или инструмент разработчика.
Наша команда snippetbucket.com создала множество решений с помощью electronics.js, где их требования были аналогичными. а также реструктурировать и защитить сайт с помощью множества инструментов.
Также с помощью electronics.js многие веб-решения хорошо конвертированы и защищены.
Если вы используете ответ, то удалите все файлы.map файлы /js и /css из созданной вами сборки.
Вы можете легко отключить инструменты разработчика, определив это:
Object.defineProperty(console, '_commandLineAPI', { get : function() { throw 'Nooo!' } })
Нашли это здесь: Как Facebook отключает встроенные в браузер Инструменты разработчика?
Брэндон,
Вы можете сделать что-то вроде этого, это очень простая идея, вы можете переопределить нативный код, выполнив это, это не совсем то, что вы ищете, вы разработали из этого
delete window.console
console.log('test'); // Noting will work