У меня есть "контентный" веб-сайт, который некоторые исследователи и 419 мошенников любят активно сканировать, что также приводит к снижению затрат и производительности. :( У меня нет выбора: мне нужно запретить им доступ к файлам карты сайта и индексу. :(
Я делаю то же, что и Facebook: я генерирую индекс карты сайта на лету (/sitemap.php). Я занес в белый список "хороших" сканеров с обратным поиском DNS (PHP) и проверкой агента (то же, что и Stackoverflow). Чтобы системы из белого списка не делали содержимое индекса карты сайта общедоступным, я добавил этот заголовок (Stackoverflow его забыл):
header('Content-type: application/xml; charset="UTF-8"', true);
header('Pragma: no-cache');
header('X-Robots-Tag: NOARCHIVE');
Вопрос 1: Мне что-то не хватает для защиты файла индекса карты сайта?
Вопрос 2: Проблема возникает из-за сгенерированных файлов статической карты сайта (.xml.gz). Как я могу их защитить? Даже если у них есть "трудно угадываемое" имя, их легко найти с помощью простого запроса Google (пример: "сайт: stackoverflow.com тип файла: xml") и у меня очень ограниченный доступ к .htaccess.
РЕДАКТИРОВАТЬ: Это не проблема конфигурации сервера. Предпочтительный язык - PHP.
РЕДАКТИРОВАТЬ 2: Извините, это чисто программный вопрос, но он был передан из SO, и я не могу закрыть / удалить его. :(
Вы всегда можете использовать URL-адрес для карты сайта, который не будет раскрыт никому, кроме движков, на которые вы явно отправите.
Посмотри на http://en.wikipedia.org/wiki/Sitemaps
Вы должны использовать белый список и разрешать доступ только хорошим поисковым системам к этим файлам карты сайта, таким как Google и Bing.
Это огромная проблема, которую, боюсь, большинство людей даже не рассматривают при отправке файлов карты сайта в Google и Bing. Я отслеживаю каждый запрос к моим файлам карты сайта xml, и с тех пор, как я начал это делать (3 месяца назад), я отказал в доступе более чем к 6500 IP-адресам. Только Google, Bing и некоторые другие могут просматривать эти файлы сейчас.
Поскольку вы используете белый список, а не черный список, они могут покупать все прокси, которые им нужны, и они никогда не пройдут через них. Кроме того, вы должны выполнить обратный поиск DNS, прежде чем вносить в белый список и IP-адрес, чтобы убедиться, что они действительно от Google или Bing. Что касается того, как это сделать в PHP, я понятия не имею, поскольку мы являемся магазином Microsoft и занимаемся разработкой только для ASP.NET. Я бы начал с получения диапазона IP-адресов, из которых Google и Bing запускают своих ботов, а затем, когда с одного из этих IP-адресов поступает запрос, выполните поиск в DNS и убедитесь, что в имени DNS есть «googlebot» или «msnbot». , если это так, выполните обратный поиск в DNS по этому имени, чтобы убедиться, что возвращенный IP-адрес совпадает с исходным IP-адресом. Если это так, то вы можете безопасно разрешить IP-адресу просматривать ваш файл карты сайта, если нет, запретите доступ и 404 джокерам. Я получил эту технику в разговоре с техническим специалистом Google, кстати, так что она довольно надежна.
Обратите внимание: я владею и управляю сайтом, который просматривает около 4 000 000 страниц в месяц, поэтому для меня это было огромным приоритетом, поскольку я не хотел, чтобы мои данные были легко утилизированы. Кроме того, я использую recaptcha после 50 запросов страниц с одного IP в течение 12 часов, и это действительно хорошо помогает отсеять ботов.
Я нашел время, чтобы написать этот пост, так как надеюсь, что он поможет кому-то другому и прольет свет на то, что я считаю проблемой, которая остается в значительной степени незамеченной.
Как насчет не создание sitemap.php на лету? Вместо этого регенерируйте его один раз в день (или что-нибудь еще) и используйте как статический файл. Таким образом, даже если его запрашивают 10 000 сканеров в день - и что?
Вы можете использовать robots.txt, чтобы запретить доступ к файлу, но вы также можете заблокировать IP-адреса. Простой способ сделать это - посмотреть на HTTP-рефереры в ваших веб-журналах и написать задание cron, чтобы взять эти IP-адреса (по рефереру) и добавить их в hosts.deny вашего веб-сайта.