apacheのログに未公開のurlがあった

 apacheのログを見ていたらこんなものが。

kazz.red:80 114.119.163.48 - - [23/Aug/2020:22:31:58 +0900] "GET /cafe/art/00011.html HTTP/1.1" 401 723 "-" "Mozilla/5.0 (Linux; Android 7.0;) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; PetalBot;+http://aspiegel.com/petalbot)" 10.179.80.32

 個人向けの非公開メモとして運用しているブログ(KENT-WEBのCafeLogを使用)のurlを直接叩きに来ている。BASIC認証が効いて401を返しているが、なぜこのurlが漏れているんだ?

 一つ考えたのは、Android端末に使っているVPN方式のPersonalFirewallのNetGuard経由で漏れている可能性。しかし、前回Androi端末を使って以降に作成したページもアクセスされているので、濡れ衣だった。

 しばらく考えて原因判明。sitemap.xmlで自ら公開しているせいだった。sitemap.xmlを生成しているスクリプトを修正。

<?php
error_reporting('ERROR');
$basedir = "/var/www/default/docs";
$homeurl="https://kazz.red";
$sitemapfile = "/sitemap.xml";

$sitemap ='<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="https://www.sitemaps.org/schemas/sitemap/0.9">
';

exec("find $basedir -type f -name \"*.html\" ! -path \"*/cafe/*\"", $files);

shuffle($files);

$i=0;
foreach($files as $file){
	if($i>=200){break;}	#200個くらいにしとく。
	$time = date(DATE_ATOM,filemtime($file));
	$location = $homeurl . str_replace($basedir,"",$file);
	$sitemap .= "	<url>
		<loc>$location</loc>
		<lastmod>$time</lastmod>
	</url>
";
	$i++;
}
$sitemap .= '</urlset> 
';

file_put_contents("$basedir$sitemapfile",$sitemap);

echo sizeof($files)." files exist.\n";
echo $i ." files were registerd.\n";

?>

 findで特定のディレクトリを除外するには ! -pathと。