Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

Chrome的控制台又作了个死

  Chrome(目前stable最新38版)的控制台中,很多地方依然基于原型链上的__proto__来实现,而__proto__是个很不可靠的东西它的configurableture,可以被删除,也可以重新配置,于是从这里入手的话又会出现一些奇怪的东西。
  这个代码劫持了原型链上的__proto__,那么当我们往控制台输出一个对象时就会产生其它东西:
<script>
Object.defineProperty(Object.prototype,"__proto__",{
  set:console.log.bind(console,"fuck"),
  get:console.log.bind(console,"shit")
});
console.log([1,2,3]);
</script>

  也就是说,用console.log输出一个对象的话,__proto__是会被使用的,如果我们在__proto__的访问器函数中再放一个console.log,并且也输出一个对象的话呢!!?结果可想而知,如果Chrome的控制台是打开状态,那么页面将会死掉。于是我又冒出了一个奇怪的想法,是不是可以用这货来禁止Chrome控制台被打开呢?嘛,这想法着实奇葩,我都被自己震惊到了。于是最后就放一个如此的代码吧(代码有风险,运行需谨慎): <script>
Object.defineProperty(Object.prototype,"__proto__",{
  set:console.log.bind(console,[]),
  get:console.log.bind(console,[])
});
console.log([1,2,3]);
</script>
网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^