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

Web前端如何防止被恶意调式?

前言

为什么要防止被恶意调式?

我们的目的是尽可能的减少资源盗取,爬虫和攻击 api !

具体实现

第一种方式:禁止F12和右击、审查元素设置中强行打开开发者会直接关闭网页

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>防爬虫</title>
		<script>
			//禁用右键(防止右键查看源代码)
			window.oncontextmenu = function() {
				return false;
			}
			//禁止任何键盘敲击事件(防止F12和shift+ctrl+i调起开发者工具)
			window.onkeydown = window.onkeyup = window.onkeypress = function() {
				window.event.returnValue = false;
				return false;
			}
			//如果用户在工具栏调起开发者工具,那么判断浏览器的可视高度和可视宽度是否有改变,如有改变则关闭本页面
			var h = window.innerHeight,
				w = window.innerWidth;
			window.onresize = function() {
				if (h != window.innerHeight || w != window.innerWidth) {
					window.close();
					window.location = "about:blank";
				}
			}
		</script>
	</head>
	<body>
		<h1>hello</h1>
	</body>
</html>

第二种方式:使用开源项目ConsoleBan

Github:https://github.com/fz6m/console-ban/blob/master/README.zh.md

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>防爬虫</title>
		<script src="https://cdn.jsdelivr.net/npm/console-ban@5.0.0/dist/console-ban.min.js"></script>
		<script>
			// 第一种防爬虫的方法,打开F12自动重定向
			// ConsoleBan.init({
			// 	redirect: '/404'
			// })

			//第二种防爬虫的方法,重写页面元素
			var div = document.createElement('div')
			div.innerHTML = '<h1> 不要偷看啦~</h1>'
			ConsoleBan.init({
				// 重写 body 为字符串
				write: '<h1> 不要偷看啦~ </h1>',
				// 可传入节点对象
				write: div
			})

			//第三种防爬虫的方法,打开F12自动走debugger
			ConsoleBan.init({
				debug: true,
				debugTime: 1
			})
		</script>
	</head>
	<body>
		<h1>hello</h1>
	</body>
</html>

主要是通过ConsoleBan.init()进行实例化,跟Vue实例化用法类似,该对象可传参数如下:

参数名必须类型默认值描述
clearnobooleantrue禁用 console.clear 函数
debugnobooleantrue是否开启定时 debugger 反爬虫审查
debugTimenonumber3000定时 debugger 时间间隔(毫秒)
redirectnostring-开启控制台后重定向地址
writenostring | Element-开启控制台后重写 document.body 内容,支持传入节点或字符串
callbacknoFunction-开启控制台后的回调函数
bfcachenobooleantrue禁用 bfcache 功能

第三种方式:自动清空控制台

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>防爬虫</title>
		<script>
			var clear = console.clear
			setTimeout(clear, 1)
		</script>
	</head>
	<body>
		<h1>hello</h1>
	</body>
</html>

总结

1.三种方式都很好用,具体使用那种方式进行防范可以根据自己实际需求进行选定!

2.笔者能力有限,希望有经验的大神能在评论区提供更多的方式方法!


http://www.kler.cn/news/8211.html

相关文章:

  • JS 数组排序方法 - sortFun
  • Kotlin 面向对象(二)
  • Redis —缓存常见异常
  • 父子组件传值问题
  • Ludwig Otto Hölder
  • php企业公司员工考勤加班系统
  • 面试被问到:测试计划和测试方案有什么区别?
  • 派盘为您的个人数据安家
  • 一篇文章,弄懂蓝牙协议怎么看,进军物联网!
  • 【WCH】基于Keil环境CH32F203 GPIO点灯实验
  • 全国青少年电子信息智能创新大赛(复赛)python·模拟三卷,含答案解析
  • 1mm³大小,世界首个功率破KW的单芯片激光模组诞生
  • Unity入门开发资源链接
  • Flask项目运行报错解决:sqlalchemy.exc.OperationalError
  • 给boss直聘的搜索结果加上hr活跃状态,少看点半年活跃的岗位
  • C++整人代码,十分朴实但威力无穷,让你对cout怀疑人生,整死你的同学
  • 线性回归讲解
  • 阿里巴巴春招的后端面经来啦~
  • yolov5-v7.0实例分割快速体验
  • CIE (PCI Express) 1x, 4x, 8x, 16x总线端子说明
  • 4.7--计算机网络之TCP篇之socket编程--(复习+深入)---好好沉淀,加油呀
  • 版本控制工具Git的常见命令与使用方法
  • 编程的核心目的:计算数据
  • 二、Java 并发编程(1)
  • 20230404英语学习
  • Javase学习文档------数组
  • 使用spring boot拦截器实现青少年模式
  • Nuxt项目动态路由带参接参
  • 【从零开始学习 UVM】12.3、UVM RAL(续更) —— RAL Classes Methods
  • java微服务商城高并发秒杀项目--008.订单服务继承Sentinel以及sentinel安装dashboard