面对爬虫的时候以往都是人为刀俎,我为鱼肉的状态。起码因为爬虫增加0.5倍工作量,为了提高系统安全,也是费尽心思。提出4阶段防御爬虫。
1.非法提交拉黑: 明显入侵提交检测到就把客户端IP拉黑禁用访问网站一段时间。 2.爬虫诱饵: 各业务嵌入各种爬虫诱饵链接。正常业务不会加载,爬虫爬取加载后即可判断是爬虫,进行拉黑禁用。 3.爬虫攻击: 借助自己客户端发布http服务。网站嵌入各种可用的、不可用的链接。爬虫爬取到触发的资源就用cmd获取到访问进程杀掉,主动攻击爬虫。 4.爬虫陷入
本次提出爬虫陷入理论,什么是爬虫陷入? 爬虫陷入是让爬虫进入无限套娃爬行。即无限递归,进入死循环难以跳出来。首先爬虫一般是爬行一个页面,然后把页面的各种url再爬行,依次铺开爬行整个网站。因为网站资源是有限的,只要记住爬行过的链接碰到后不爬行,就可爬取基本整个网站。基于此爬行原理设计爬行陷入。首先服务器后台实现虚了资源路由,请求某些路由就由后台代码按时间,唯一索引生成html、js等代码和里面的url。这样爬虫爬取第一个虚拟路由时候系统返回的资源里包含了当前时间和唯一序号生成的各种url路径。爬虫爬取这些子url又是虚拟路径,又会返回按时间和唯一生成的资源url路径。每次返回资源的内部url都是不重复的,那么爬虫从第一个虚拟路由爬行后不断爬取内部每个url,层层嵌套是没有尽头的。就会陷入一个无限递归的死循环状态。
爬虫爬取第一个虚拟url返回
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>页面1</title>
</head>
<body id="bodyAll" style="background-color:#FDFDFD;overflow:hidden;">
<marquee id="marquee" scrollamount="5" class="marquee"></marquee>
<a href="../../login/core/frmLisCore20220518172901001.aspx"></a>
<a href="../../login/core/LisCore20220518172901001.css"></a>
<a href="../../login/core/LisCore20220518172901001.js"></a>
</body>
</html>
爬虫爬取…/…/login/core/frmLisCore20220518172901001.aspx返回
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>页面2</title>
</head>
<body id="bodyAll" style="background-color:#FDFDFD;overflow:hidden;">
<marquee id="marquee" scrollamount="5" class="marquee"></marquee>
<a href="../../login/core/frmLisCore20220518172901002.aspx"></a>
<a href="../../login/core/LisCore20220518172901002.css"></a>
<a href="../../login/core/LisCore20220518172901002.js"></a>
</body>
</html>
然后爬虫爬取…/…/login/core/frmLisCore20220518172901002.aspx返回
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>页面3</title>
</head>
<body id="bodyAll" style="background-color:#FDFDFD;overflow:hidden;">
<marquee id="marquee" scrollamount="5" class="marquee"></marquee>
<a href="../../login/core/frmLisCore20220518172901003.aspx"></a>
<a href="../../login/core/LisCore20220518172901003.css"></a>
<a href="../../login/core/LisCore20220518172901003.js"></a>
</body>
</html>
基于此理论,网站实现的虚拟路由要覆盖面广。让爬虫无法区分是虚拟的路由还是实际资源。构造的虚拟url尽量用字母,让爬虫难以用简单的包含数字剔除,然后再各个页面加入爬虫陷入url即可。以此扰乱爬行。结合前面三个理论多层级预防网站被爬取。
|