Как я могу защитить свой индексный файл Sitemap и файлы sitemap.xml от распаковщиков?

У меня есть "контентный" веб-сайт, который некоторые агрессоры и 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 (пример: " site: stackoverflow.com filetype: xml"), и у меня очень ограниченный доступ к.htaccess.

РЕДАКТИРОВАТЬ: Это не проблема конфигурации сервера. Предпочитаемый язык - PHP.

РЕДАКТИРОВАТЬ 2: Извините, это чисто программный вопрос, но он был передан из SO, и я не могу закрыть / удалить его.:(

4 ответа

Вы всегда можете использовать URL-адрес для карты сайта, который не будет раскрываться кому-либо еще, кроме механизмов, которые вы явно отправите.

Взгляните на http://en.wikipedia.org/wiki/Sitemaps

Вы должны использовать белый список и разрешать доступным поисковым системам только к таким файлам карты сайта, как Google и Bing.

Я боюсь, что это огромная проблема, которую большинство людей даже не учитывают при отправке файлов карты сайта в Google и Bing. Я отслеживаю каждый запрос к своим файлам xml Sitemap и с тех пор, как начал это делать (3 месяца назад), я отказал в доступе к более чем 6 500 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 на лету? Вместо этого обновляйте его один раз в день (или что-то еще имеет смысл) и представляйте его как статический файл. Таким образом, даже если 10000 сканеров в день запрашивают это - и что?

Вы можете использовать robots.txt, чтобы запретить файл, но вы также можете заблокировать IP-адреса. Простой способ сделать это - посмотреть на ссылки HTTP в ваших веб-журналах и написать задание cron, чтобы взять эти IP (по ссылке) и добавить их в hosts.deny для вашего сайта.

Другие вопросы по тегам