当前位置: 首页 > news >正文

Javascript反调试实现判断用户是否打开了浏览器控制台

前言

晓杰最近在研究如何防止用户恶意调试前端网页代码,防止打开控制台进行调试,首先禁用了浏览器页面右键事件和F12等快捷键!然后利用了创建元素是否成功方式进行校验,具体实现代码如下。

代码


document.addEventListener('keydown', function(event) {// 检查 F12 键if (event.key === 'F12') {event.preventDefault();}// 检查 Ctrl + Shift + I 组合键if (event.ctrlKey && event.shiftKey && event.key === 'i') {event.preventDefault();}// 检查 Ctrl + Shift + J 组合键if (event.ctrlKey && event.shiftKey && event.key === 'j') {event.preventDefault();}// 检查 Ctrl + Shift + C 组合键if (event.ctrlKey && event.shiftKey && event.key === 'c') {event.preventDefault();}
});
document.addEventListener('contextmenu', function(event) {event.preventDefault();
});
var ConsoleManager={onOpen(){},onClose(){},init(){var self = this;var x = document.createElement('div');var isOpening = false,isOpened=false;Object.defineProperty(x, 'id', {get(){if(!isOpening){self.onOpen();isOpening=true;}isOpened=true;}});setInterval(function(){isOpened=false;console.info(x);console.clear();if(!isOpened && isOpening){self.onClose();isOpening=false;}},200)}
}
//检测到打开 直接跳转到其他网址 或者做其他方式自己改
ConsoleManager.onOpen = function(){location.href="https://www.java.pet";
}
ConsoleManager.init();

示例地址

https://pan.metanetdisk.com/

本文作者

Soujer

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【一招解决】局域网内命令行无法通过代理进行依赖下载,适用于npm、pip、mvn、gradle等命令
  • EXTI外部中断之对射式红外传感器计次应用案例
  • 鱼眼相机去畸变和矫正
  • python绘制电路图
  • wordpress全局自适应网址导航整站打包源码,含主题和数据库
  • AIGC从入门到实战:基础理论【核心算法与模型】
  • Android如何做主线程卡顿监控
  • 解决pypi上传轮子unsupported platform tag 'linux_x86_64'问题
  • Qt 实战(9)窗体 | 9.2、QDialog
  • 【秋招笔试】8.11大疆秋招(第二套)-测开岗
  • 如何使用 Jupyter Notebook
  • 1Panel配置
  • C++(27): 线程池
  • 【自动驾驶】自定义消息格式的话题通信(C++版本)
  • 【CS.DB】数据库-关系型数据库-MySQL-3.4.数据的插入_查询_更新和删除
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 10个最佳ES6特性 ES7与ES8的特性
  • 4. 路由到控制器 - Laravel从零开始教程
  • ES6之路之模块详解
  • js
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • php面试题 汇集2
  • 基于axios的vue插件,让http请求更简单
  • 计算机在识别图像时“看到”了什么?
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 使用agvtool更改app version/build
  • 数据仓库的几种建模方法
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 微信开放平台全网发布【失败】的几点排查方法
  • 一些关于Rust在2019年的思考
  • 如何在招聘中考核.NET架构师
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # 达梦数据库知识点
  • #{} 和 ${}区别
  • #{}和${}的区别是什么 -- java面试
  • #数据结构 笔记一
  • #知识分享#笔记#学习方法
  • $(function(){})与(function($){....})(jQuery)的区别
  • (1)svelte 教程:hello world
  • (2015)JS ES6 必知的十个 特性
  • (27)4.8 习题课
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (c语言)strcpy函数用法
  • (Oracle)SQL优化技巧(一):分页查询
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (笔试题)分解质因式
  • (一)Java算法:二分查找
  • (转)memcache、redis缓存
  • (自用)仿写程序
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net Application的目录
  • .NET 使用配置文件