显然,由于最近的骗局,开发者工具被人们用来发布垃圾邮件,甚至被用来“黑客”账户。Facebook已经屏蔽了开发者工具,我甚至无法使用控制台。
他们是怎么做到的??一篇Stack Overflow的帖子声称这是不可能的,但Facebook已经证明他们错了。
只需转到Facebook并打开开发工具,在控制台中键入一个字符,就会弹出此警告。无论你投入什么,它都不会被执行。
这怎么可能?
他们甚至在控制台中阻止了自动完成:
显然,由于最近的骗局,开发者工具被人们用来发布垃圾邮件,甚至被用来“黑客”账户。Facebook已经屏蔽了开发者工具,我甚至无法使用控制台。
他们是怎么做到的??一篇Stack Overflow的帖子声称这是不可能的,但Facebook已经证明他们错了。
只需转到Facebook并打开开发工具,在控制台中键入一个字符,就会弹出此警告。无论你投入什么,它都不会被执行。
这怎么可能?
他们甚至在控制台中阻止了自动完成:
当前回答
在Firefox中,它没有做到这一点,因为Firefox是一个开发人员浏览器,我认为由于命令WEBGL_debug_render_info在Firefox中被弃用,将被删除。请使用RENDERER和错误Referrer Policy:对于跨站点请求,将很快忽略限制较少的策略,包括“降级时没有Referrer”、“跨源时源”和“不安全url”:https://static.xx.fbcdn.net/rsrc.php/v3/yS/r/XDDAHSZfaR6.js?_nc_x=Ij3Wp8lg5Kz.
其他回答
我无法在任何页面上触发它。更强大的版本可以做到这一点:
window.console.log = function(){
console.error('The developer console is temp...');
window.console.log = function() {
return false;
}
}
console.log('test');
设置输出样式:JavaScript控制台中的颜色
Edit Thinking@joeldixon66有正确的想法:从控制台禁用JavaScript执行«:::KSpace:::
我是Facebook的安全工程师,这是我的错。我们正在对一些用户进行测试,看看它是否可以减缓一些用户被诱骗将(恶意)JavaScript代码粘贴到浏览器控制台的攻击。
要明确的是:试图阻止黑客客户端通常是一个坏主意;这是为了防止特定的社会工程攻击。
如果你最终参加了测试组,并对此感到恼火,对不起。我试图使旧的选择退出页面(现在的帮助页面)尽可能简单,同时仍然足够吓人,至少可以阻止一些受害者。
实际代码与@joeldixon66的链接非常相似;我们的有点复杂,没有什么好的理由。
Chrome将所有控制台代码封装在
with ((console && console._commandLineAPI) || {}) {
<code goes here>
}
…所以网站重新定义了控制台_要抛出的commandLineAPI:
Object.defineProperty(console, '_commandLineAPI',
{ get : function() { throw 'Nooo!' } })
这还不够(试试看!),但这就是主要技巧。
结语:Chrome团队认为从用户端JS击败控制台是一个错误,并解决了这个问题,使这种技术无效。之后,添加了额外的保护以保护用户免受自我xss的影响。
我有一个简单的方法:window.console=函数(){}
自从facebook禁用控制台以来,Chrome发生了很大变化。。。
截至2017年3月,这不再有效。
您所能做的最好是禁用一些控制台功能,例如:
if(!window.console) window.console = {};
var methods = ["log", "debug", "warn", "info", "dir", "dirxml", "trace", "profile"];
for(var i=0;i<methods.length;i++){
console[methods[i]] = function(){};
}
在内部,devtools将一个名为getCompletions的IIFE注入页面,当在devtools控制台内按下一个键时调用。
查看该函数的源代码,它使用了一些可以覆盖的全局函数。
通过使用Error构造函数,可以获得调用堆栈,当Devtools调用时,它将包括getCompletions。
例子:
const disableDevtools=回调=>{const original=Object.getPrototypeOf;Object.getPrototypeOf=(…args)=>{if(Error().stack.includes(“getCompletions”))callback();返回原始(…args);};};禁用开发工具(()=>{console.error(“devtools已禁用”);而(1);});