应直接在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免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











