如何禁用浏览器开发人员工具?

时间:2011-09-26 18:18:33

标签: javascript

我正在开发一个Web应用程序,因为它可以访问下面的数据库,我需要能够在Firefox和所有类似的应用程序中禁用Safari,Chrome,Firefox和Internet Explorer以及Firebug中的开发人员工具。有没有办法做到这一点?

注意:数据库提供的AJAX框架要求给予数据库的任何内容都在可以修改的Web参数中,并且返回的任何内容都将在JavaScript中处理。因此,当它返回一个值,例如用户是否可以访问网站的某个部分时,必须使用JavaScript处理,然后开发人员工具可以访问。所以这是必需的。

更新:对于那些仍然认为我做出错误假设的人,我确实问了供应商。以下是他们的回复:

以下是一些降低风险的建议:

  

1)使用javascript Obfuscator对代码进行模糊处理并仅提供   带有销售应用程序的混淆版本;保持非   混淆版本供自己编辑。这是一个在线的   混淆:   How can I obfuscate (protect) JavaScript?   http://en.wikipedia.org/wiki/Obfuscated_code   http://javascriptobfuscator.com/default.aspx

     

2)使用描述性较低的名称;也许'repeatedtasks.js'代替   'security.js'作为'security.js'可能会对任何人都更加突出   将这类信息视为重要信息。

15 个答案:

答案 0 :(得分:89)

不,你不能这样做

开发人员菜单位于客户端,由用户的浏览器提供。

此外,浏览器开发人员应该来处理服务器端数据库代码,如果确实如此,则需要进行一些重大的重组。

答案 1 :(得分:50)

如果您的框架要求您在客户端进行授权,那么......

  

您需要更改框架

当您将应用程序放在野外时,您不信任的用户可以访问它;你必须在沙滩上划一条线。

  • 您拥有的物理硬件;并且可以锁在一扇坚固的门后。 你可以在这里做任何你喜欢的事;这是保存数据库,执行授权功能以决定谁可以对数据库做什么的好地方。
  • 其他所有内容; 在客户端计算机上包含浏览器;手机;便利亭位于办公大厅。 你不能相信这些!永远! 你无能为力,这意味着你可以完全确定这些机器不会骗你和你的客户。你无法控制它,所以你不可能希望知道发生了什么。

答案 2 :(得分:22)

事实上,这在某种程度上是可能的(how-does-facebook-disable-developer-tools),但这对保护您的数据非常不利。攻击者可能总是使用一些你无法控制的其他(开放的,自编写的)引擎。甚至javascript混淆可能只会减慢你的应用程序的一点点破解,但它也几乎没有安全性。

保护数据的唯一合理方法是在服务器端编写安全代码。 请记住,如果您允许某人下载某些数据,他可以随心所欲地使用它。

答案 3 :(得分:19)

你的开发环境无法这个脑死亡。它不可能。

我强烈建议您通过电子邮件向老板发送电子邮件:

  • 培训/学习计划中需要一到两周的时间。
  • 需要与供应商签订足够的支持服务单,以了解如何执行服务器端验证。
  • 明确警告,如果该工具无法进行服务器端验证,那么当您的整个数据库泄露/销毁/等等时,您在华尔街日报的首页上取笑

答案 4 :(得分:15)

没有。无法为最终用户禁用开发人员工具。

如果您的应用程序不安全,如果用户可以访问开发人员工具,那么它只是简单不安全。

答案 5 :(得分:10)

不要忘记像Fiddler这样的工具。即使您锁定了所有浏览器的控制台,即使您使用HTTPS,也可以在客户端上修改http请求。 Fiddler可以捕获来自浏览器的请求,用户可以修改它并使用恶意输入重新播放。除非您保护您的AJAX请求,但我不知道如何执行此操作的方法。

不要相信您从任何浏览器收到的任何输入。

答案 6 :(得分:1)

在发布此答案的时候(2015年)更新,这个技巧是可能的。现在(2017年)浏览器已经成熟。 以下技巧不再有效!

是的,这是可能的。 Chrome在

中包含所有控制台代码
with ((console && console._commandLineAPI) || {}) {
  <code goes here>
}

...所以网站重新定义console._commandLineAPI投掷:

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

这是主要技巧!

答案 7 :(得分:1)

我找到了一种方法,当用户打开开发工具时,您可以使用debugger关键字来停止页面工作

(function(){
  debugger
}())

答案 8 :(得分:1)

您不能禁用开发人员工具。但您可以惹恼任何尝试使用您网站上的开发人员工具的人,尝试使用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)
            }
        }
        )()
    }
    )();

答案 9 :(得分:1)

您不能阻止开发人员工具,但是可以尝试阻止用户输入它。您可以尝试自定义右键菜单并阻止开发人员工具的击键。

答案 10 :(得分:1)

$('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);
        }
    }();

答案 11 :(得分:0)

是的,这是一个可怕的设计,您不能禁用开发人员工具。您的客户端UI应该位于rest api的顶部,该api的设计方式使用户无论如何都无法修改任何已经是有效输入的内容。

您需要对输入进行服务器端验证。服务器端验证不必冗长而丰富,只需完成即可。

例如,在客户端,您可能有一个ui来显示必填字段等。但是在服务器端,您可以将一个布尔值设置为true,如果一个字段验证失败,然后将其设置为false,然后拒绝整个请求。

此外,您的客户端应用也应该经过身份验证。您可以做到十万种方式。但是我喜欢做的是使用ADFS传递身份验证。他们通过adfs登录该站点,并为其生成会话cookie。该会话Cookie获取将传递到其余api(全部位于同一域中),我们通过该会话cookie验证对其余api的请求。这样,尚未通过登录窗口登录的任何人都无法调用rest api。只能从他们的浏览器上下文中调用它。

明智地使用开发人员工具,您需要以一种这样的方式设计应用程序,即用户在开发人员控制台中可以做的任何事情都是(功能)或破坏性的事情。即说他们用js代码段填写了所有字段,没关系,那是有效的输入。假设他们覆盖了脚本,并尝试将不良数据发送到api调用。没关系,您的服务器端验证将拒绝任何错误的输入。

因此,基本上,设计您的应用程序时,开发人员工具要么欺骗他们的经验(因为它行不通),要么让他们的生活更轻松,例如每次自动选择国家。

此外,您甚至都没有考虑扩展...扩展可以做任何事情,开发者控制台可以做的一切...。

答案 12 :(得分:-1)

是的。没有人可以控制客户端浏览器或禁用开发者工具或调试器工具。

但是您可以使用 electron.js 构建桌面应用程序,您可以在其中启动您的网站。您可以在哪里停止调试器或开发者工具。

我们的团队snippetbucket.com 已经使用electron.js 构建了大量解决方案,他们的需求与此类似。以及使用多种工具重构和保护网站。

与 electron.js 一样,许多网络解决方案都得到了很好的转换和保护。

答案 13 :(得分:-2)

您可以通过定义以下内容轻松禁用开发人员工具:

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

在此处找到了它:How does Facebook disable the browser's integrated Developer Tools?

答案 14 :(得分:-7)

布兰登,

你可以做这样的事情,这是一个非常基本的想法,你可以通过这样做来覆盖本机代码,这不是你想要的,你从这个开发

delete window.console

console.log('test'); // Noting will work