协慌网

登录 贡献 社区

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

显然,由于最近的诈骗,开发人员工具被人们利用来发布垃圾邮件,甚至用来 “破解” 帐户。 Facebook 已经阻止了开发者工具,我甚至无法使用控制台。

在此输入图像描述

他们是怎么做到的?? One Stack Overflow 帖子声称这是不可能的 ,但 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 中取消控制台是一个错误并修复了问题 ,导致此技术无效。之后,添加了额外的保护以保护用户免受自我 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);

这样,控制台自动完成无提示失败,而在控制台中键入的语句将无法执行(将记录异常)。

参考文献:

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

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

console.log('test');

设置输出样式: JavaScript 控制台中的颜色

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