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);
有了这个,控制台自动完成将自动失败,而在控制台中输入的语句将无法执行(将记录异常)。
参考文献:
我无法在任何页面上触发它。 更强大的版本会做到这一点:
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?