当我们在 canonical.php 中追踪 WordPress 的 PHP 通知时,其中 parse_url() 创建了一个没有“路径”条目的数组,我们在访问日志中发现了以下相关行(具有相应的 301 重定向):
188.165.XXX.XXX - - [29/Jun/2016:07:58:34 +0200] "GET ?subject=公司名称 - 通过网站联系 HTTP/1.1" 301 - "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12" 1603141 430 520
188.165.XXX.XXX - - [29/Jun/2016:07:58:36 +0200] "GET /?subject=公司名称 HTTP/1.1" 200 4908 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12" 404908 433 5445
似乎是某个机器人从站点获取现有的 mailto: 链接并尝试通过 http: 访问它..并最终到达主页。
注意缺少前导斜杠在第一个 GET 请求中。
知道这是如何发生的吗?
尝试使用 php file_get_contents() 或 curl 以及类似方法重现此类条目,但无济于事,访问日志中总是以斜杠开头。
网站位于某个共享主机上,phpinfo 显示:“Linux vhost01 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u3 (2016-01-17) x86_64”,SAPI 模块中有“CGI/FastCGI”和“Apache 2.0 Handler”。无法准确看到 Apache 2 的版本 :-(
编辑:所有其他日志条目都以斜杠开头。
答案1
我认为这会使问题重现:
echo -e "GET ?subject=Company-Name HTTP/1.1\r\nHost: www.example.com\r\n\r\n" | nc <your IP> 80
至于为什么会发生这种情况,嗯,你的猜测(有人在抓取 mailto 链接)非常合理。很多愚蠢的人都在编写软件。