java中的接口是类吗
408
2022-10-06
进击的反爬机制(下面关于反爬机制描述错误的是)
爬 虫 & 反爬虫
爬 虫:指通过一定的规则策略,自动抓取、下载互联网上的网页内容,再按照某些规则算法抽取数据,形成所需要的数据集。有了数据,就有可能进行一些非法活动。
反爬虫:一般指网站管理员使用一定的技术手段,防止爬虫程序对网站的网页内容进行爬取,以及阻止通过爬虫获取数据后的非法活动。
反爬方与爬虫方相互博弈,不断制造爬取难度,或一定程度上阻止了爬虫行为。爬虫方也在不断更新技术,来对抗种种反爬限制。
对抗过程
初始状态下,网站提供网站服务,未部署任何反爬措施。
ROUND 1
爬虫方启动爬虫程序 (实验环境中使用 scrapy 爬取) 成功爬取网页内容。
反爬方发现有爬虫程序在对网站进行爬取,在分析日志中访问请求的 user-agent 后,加载 iWall3 Web应用防火墙模块,编写并加载防护规则 anti-crawlers-match-user-agents.json 如下:
{ "info": { "title": "UA Crawlers list" }, "rules": [ { "meta": { "phase": 2, "desc": "https://github.com/coreruleset/coreruleset/blob/v3.3/dev/rules/crawlers-user-agents.data" }, "if": { "variable": [ "REQUEST_HEADERS", "REQUEST_BODY", "REQUEST_FILENAME" ], "transform": "lowercase", "operator": "contain", "pattern": [ "80legs", "black widow", "blackwindow", "prowebwalker", "pymills-spider", "ahrefsBot", "piplbot", "grapeshotcrawler/2.0", "grapefx", "searchmetricsbot", "semrushbot", "rogerbot", "mj12bot", "owlin bot", "lingewoud-550-spyder", "wappalyzer", "scrapy" ] }, "then": [ "IP.bad_ua_count@20=IP.bad_ua_count+1", "if": "IP.bad_ua_count > 3", "then": { "action": "deny", "log": "Too frequnt access from crawlers." } ] } ] }
爬虫方再次爬取网页,发现超过一定阈值后,后续爬虫请求被阻止:
反爬方防护成功。
ROUND 2
爬虫方在初次交锋中 user-agent 被识别,这一次则使用随机的 user-agent (scrapy 使用 random_user_agent 配置),成功爬取网页内容。如下图:
反爬方利用 user_agent 防护的措施失效后,可根据“爬虫 (同一个 IP 地址) 在短时间内会访问多个不同应用 (如 url)”的逻辑,编写并加载防护规则 anti-crawlers-limit-user-access-different-application.json 如下:
{ "rules": [ { "meta": { "phase": 2, "function": "当IP.urls字段中不包含当前访问的请求名,则进行设置操作加判断操作。如果是参数代表不同应用修改即可。", "function": "设置操作包括给原有的IP.urls字段append新的请求名,并给IP.urls_count加1;", "function": "判断操作是判断IP.urls_count是否大于5(代表10秒内访问了不同的url,不同的url代表不同的功能),", "function": "若是则deny,否则放行。" }, "if": [ { "or": [ "REQUEST_FILENAME == '/shopxo-1.6.0/index.php' && @ARGS.s == '/index/user/reginfo.html'", "REQUEST_FILENAME == '/shopxo-1.6.0/index.php' && @ARGS.s == '/index/user/logininfo.html'", "REQUEST_FILENAME == '/shopxo-1.6.0/index.php' && @ARGS.s == '/index/category/index.html'", "REQUEST_FILENAME == '/shopxo-1.6.0/index.php' && contain(@ARGS.s, '/index/search/index/category_id')", "REQUEST_FILENAME == '/shopxo-1.6.0/index.php' && contain(@ARGS.s, '/index/article/index/id')", "REQUEST_FILENAME == '/shopxo-1.6.0/index.php' && contain(@ARGS.s, '/index/goods/index/id')" ] }, { "not": { "variable": "IP.args_s", "operator": "contain", "pattern": "';' .. ${@ARGS.s} .. ';'" } } ], "then": [ "IP.args_s@10=IP.args_s .. ';' .. @ARGS.s .. ';'", "IP.args_s_count@10 = IP.args_s_count+1", "if": "IP.args_s_count > 5", "then": { "action": "deny", "log": true } ] } ] }
超过一定阈值后,后续爬虫请求被阻止:
反爬方防护成功。
ROUND 3
爬虫方由于在上一回合中使用同一 IP 地址且访问速度过快,导致反爬方可以依此特性设置防护。故改为使用 IP 代理池 (scrapy 使用 IP 代理池),成功爬取网页内容。Proxy_ip 的设置如下所示:
反爬方更新防护措施,相应地在页面中增加“蜜罐页面链接”。一旦爬虫程序访问“蜜罐页面链接”就会被拦截。编写并加载防护规则 anti-crawlers-add-honeypot-page.json 如下:
{
"rules": [
{
"meta": {
"phase": 3,
"function": "当访问/shopxo-1.6.0/idnex.php时,在标签下面增加一个标签(含有假的链接)"
},
"if": [
"REQUEST_METHOD == 'GET'",
"REQUEST_FILENAME == '/shopxo-1.6.0/'",
"#ARGS == 0"
],
"then": {
"execution": [
{
"directive": "alterResponseBody",
"op": "string",
"target": " 发表评论
暂时没有评论,来抢沙发吧~