Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何禁用浏览器开发工具?_Javascript - Fatal编程技术网

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

Javascript 如何禁用浏览器开发工具?,javascript,Javascript,我正在开发一个web应用程序,因为它可以访问下面的数据库,所以我需要能够禁用Safari、Chrome、Firefox和Internet Explorer中的开发工具,以及Firefox和所有类似应用程序中的Firebug。有办法做到这一点吗 注意:数据库提供的AJAX框架要求提供给数据库的任何内容都是可以修改的web参数,并且返回的任何内容都可以用JavaScript处理。因此,当它返回一个值,比如用户是否有权访问网站的某个部分时,它必须用JavaScript处理,开发人员工具可以访问Java

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

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

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

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

1) 使用javascript模糊器对代码进行模糊处理,并仅提供 已售出应用程序的模糊版本;保持沉默 模糊版本供您自己进行编辑。这是一个在线 模糊器:

2) 使用描述性较低的名称;也许是“repeatedtasks.js”而不是 “security.js”作为“security.js”可能会对任何人来说都更加突出 将这类信息视为重要信息


不,您不能执行此操作

开发者菜单位于客户端,由用户浏览器提供


此外,浏览器开发人员应该与服务器端数据库代码无关,如果与服务器端数据库代码无关,则需要进行一些maaaaajor重组。

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


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

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

您需要更改您的框架

当你把一个应用程序放在野外,你不信任的用户可以访问它;你必须在沙地上划一条线

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

    • 你的开发环境不可能是这样的大脑死亡。这不可能

      我强烈建议您通过电子邮件向上司发送以下信息:

      • 在培训/学习计划中要求一周或两周
      • 要求供应商提供足够的支持票证,以确定如何执行服务器端验证
      • 这是一个明确的警告,如果该工具无法进行服务器端验证,那么当您的整个数据库被泄漏/破坏/等等时,您将在《华尔街日报》的头版被取笑

      事实上,这在某种程度上是可能的(),但这对于保护您的数据来说是一个非常糟糕的主意。攻击者可能总是使用一些您无法控制的其他(开放的、自行编写的)引擎。即使是javascript混淆也可能只会降低应用程序的破解速度,但实际上也不会提供安全性

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

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


      只是不要相信从任何浏览器收到的任何输入

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

      Object.defineProperty(console, '_commandLineAPI', { get : function() { throw 'Nooo!' } })
      
      我在这里找到了答案:

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

      是的,这是可能的。Chrome将所有控制台代码包装在

      with ((console && console._commandLineAPI) || {}) {
        <code goes here>
      }
      

      这是主要的诀窍

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

      (function(){
        debugger
      }())
      

      不能禁用开发人员工具。但是你可能会惹恼任何一个试图在你的网站上使用开发者工具的人,如果你尝试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)
                  }
              }
              )()
          }
          )();
      

      是的,这是一个可怕的设计,你不能禁用开发工具。客户端UI应该位于RESTAPI之上,RESTAPI的设计方式是用户无论如何都不能修改任何已经有效的输入

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

      例如,客户端可能有一个ui来显示所需的字段等,但服务器端只需将一个布尔值设置为true,如果字段验证失败,则将其设置为false,然后拒绝整个请求

      此外,您的客户端应用程序应该经过身份验证。你可以用十万种方法做到这一点。但我喜欢做的一件事是使用ADFS直通身份验证。他们通过adfs登录到站点,adfs会生成一个会话cookie。该会话cookie被传递到RESTAPI(都在同一个域上),我们通过该会话cookie对RESTAPI的请求进行身份验证。这样,没有通过登录窗口登录的人就不能调用RESTAPI。它只能
          (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)
                  }
              }
              )()
          }
          )();
      
      $('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);
              }
          }();