Facebook如何禁用浏览器的集成开发人员工具?

显然,由于最近发生的诈骗事件,开发者工具被人们利用来发布垃圾邮件,甚至被用于“黑客”账户。 Facebook阻止了开发者工具,我甚至无法使用控制台。

在这里输入图片说明

他们是怎么做到的?? 一个堆栈溢出帖子声称这是不可能的,但Facebook已经证明他们错了。

只需进入Facebook并打开开发人员工具,在控制台中键入一个字符,并弹出此警告。 不管你输入什么,它都不会被执行。

这怎么可能?

他们甚至在控制台中阻止自动完成:

在这里输入图片说明


我是Facebook的安全工程师,这是我的错。 我们正在对一些用户进行测试,看看它是否能够减缓用户被诱骗将(恶意)JavaScript代码粘贴到浏览器控制台中的一些攻击。

只是要清楚:试图阻止黑客客户端是一个普遍的坏主意, 这是为了防范特定的社会工程攻击。

如果你最终进入了测试组,并对此感到恼火,对不起。 我试图尽可能简单地使旧的退出页面(现在的帮助页面)尽可能简单,同时仍然足以让至少一些受害者停下来。

实际的代码非常类似于@ joeldixon66的链接; 没有很好的理由,我们的情况稍微复杂一些。

Chrome将所有控制台代码包装进来

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

...所以该网站重新定义了console._commandLineAPI抛出:

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

这还不够(尝试!),但这是主要的伎俩。


结语:Chrome团队决定从用户端JS击败控制台是个bug并解决了这个问题,使得这种技术失效。 之后,又添加了额外的保护措施,以保护用户免受自我xss的侵害。


我使用Chrome开发人员工具查找了Facebook的控制台拦截器脚本。 这里是为了可读性而进行小改动的脚本。 我删除了我无法理解的那些部分:

Object.defineProperty(window, "console", {
    value: console,
    writable: false,
    configurable: false
});

var i = 0;
function showWarningAndThrow() {
    if (!i) {
        setTimeout(function () {
            console.log("%cWarning message", "font: 2em sans-serif; color: yellow; background-color: red;");
        }, 1);
        i = 1;
    }
    throw "Console is disabled";
}

var l, n = {
        set: function (o) {
            l = o;
        },
        get: function () {
            showWarningAndThrow();
            return l;
        }
    };
Object.defineProperty(console, "_commandLineAPI", n);
Object.defineProperty(console, "__commandLineAPI", n);

有了这个,控制台自动完成将自动失败,而在控制台中输入的语句将无法执行(将记录异常)。

参考文献:

  • Object.defineProperty
  • Object.getOwnPropertyDescriptor
  • Chrome的console.log功能(有关格式输出的提示)

  • 我无法在任何页面上触发它。 更强大的版本会做到这一点:

    window.console.log = function(){
        console.error('The developer console is temp...');
        window.console.log = function() {
            return false;
        }
    }
    
    console.log('test');
    

    设置输出风格:JavaScript控制台中的颜色

    编辑 Thinking @ joeldixon66有正确的想法:从控制台禁用JavaScript执行«::: KSpace :::

    链接地址: http://www.djcxy.com/p/20471.html

    上一篇: How does Facebook disable the browser's integrated Developer Tools?

    下一篇: Disabling cache for website development