应直接在PHP入口文件中用stripos检测User-Agent是否含MJ12bot并立即返回403,或使用Crawler-Detect库精准识别;同时需在Nginx层添加硬拦截规则,因该爬虫无视robots.txt。

直接在PHP代码中识别并拦截MJ12bot,关键在于准确检测其User-Agent特征,并在请求进入业务逻辑前快速响应。它不遵守robots.txt,也不走常规流量路径,所以不能只靠文件配置,得在PHP层主动干预。
在入口文件中实时检测UA
把检测逻辑放在网站统一入口(如index.php、common.php或框架的中间件初始化处),避免漏判:使用stripos()做子串匹配最轻量,比正则快且稳定:
- 检查
$_SERVER['HTTP_USER_AGENT']是否包含MJ12bot(大小写不敏感) - 推荐写法:
if (stripos($_SERVER['HTTP_USER_AGENT'] ?? '', 'MJ12bot') !== false) - 匹配成功后立即返回403,并终止脚本:
http_response_code(403); exit('Forbidden');
用Crawler-Detect库精准识别(推荐长期维护)
MJ12bot被Crawler-Detect官方规则库完整覆盖,且支持多维度验证(不止看UA,还结合头信息),误判率低:- 通过Composer安装:
composer require jaybizzle/crawler-detect - 初始化后调用
isCrawler()即可识别,无需手动维护UA列表 - 示例代码:
<?php<br>use Jaybizzle\CrawlerDetect\CrawlerDetect;<br>$crawler = new CrawlerDetect();<br>if ($crawler->isCrawler()) {<br> http_response_code(403);<br> exit('Bot access denied');<br>}配合Nginx层做双重拦截(防绕过)
仅靠PHP可能被代理或伪造请求头绕过,建议在Nginx配置中补一层硬拦截:- 在站点配置的
server{}块顶部添加(注意位置:必须在location之前) - 规则写法:
if ($http_user_agent ~* MJ12bot) { return 403; } - 保存后重启Nginx(不是重载),确保生效
不建议只依赖robots.txt
MJ12bot是典型的“流氓爬虫”,公开资料和日志分析均证实它**完全忽略robots.txt指令**。单独写
User-agent: MJ12bot<br>Disallow: /基本无效,只能作为辅助说明,不能当作防护手段。
立即学习“PHP免费学习笔记(深入)”;



















