Предотвратите паука от взлома сессий Tomcat - PullRequest
3 голосов
/ 28 августа 2011

У меня довольно новый веб-сайт (~ 3 недели), работающий на Tomcat с довольно небольшим количеством посетителей.

За последнюю неделю я заметил более 1000 активных сессий, и проверка журналов Tomcat localhost_access * показывает, что Подавляющее большинство пришло от IP-адресов в этом диапазоне: 119.63.196. * Все они принадлежат Baidu Japan.

Вот небольшой пример из журналов их попадания на первую страницу. 119.63.196.107 - - [24 / Aug / 2011: 07: 02: 46 +0000] "GET /; jsessionid = 94085F76780ACFD96C8109A29446288D HTTP / 1.1" 200 10311 119.63.196.44 - - [24 / Aug / 2011: 07: 03: 21 +0000] "GET /; jsessionid = 943133C77BB1756CF11592115BA81725 HTTP / 1.1" 200 10333 119.63.196.39 - - [24 / Aug / 2011: 07: 03: 56 +0000] "GET /; jsessionid = 9B4384BDECF540C8628467F7AB4AB463 HTTP / 1.1" 200 10311 119.63.196.19 - - [24 / Aug / 2011: 07: 04: 31 +0000] "GET /; jsessionid = A0B555C3A18377D993B97D4491DD1012 HTTP / 1.1" 200 10311 119.63.196.45 - - [24 / Aug / 2011: 07: 05: 10 +0000] "GET /; jsessionid = A3782FA61558BF11C4D5AC4F3DD1EC86 HTTP / 1.1" 200 10311 119.63.196.23 - - [24 / Aug / 2011: 07: 05: 53 +0000] "GET /; jsessionid = A3AF84EF13F21492EB47FAB001A1C2E5 HTTP / 1.1" 200 10311 119.63.196.120 - - [24 / Aug / 2011: 07: 06: 31 +0000] "GET /; jsessionid = A7C490CEC2C7F2969772AC4050C6D761 HTTP / 1.1" 200 10311 119.63.196.108 - - [24 / Aug / 2011: 07: 07: 07 +0000] "GET /; jsessionid = A7F769D354CB37E99843292D650D6367 HTTP / 1.1" 200 10311

Ни один отдельный IP-адрес не блокирует сайт, но коллективные запросы из этого диапазона IP-адресов занимают активные сессии. И они, кажется, делают это в некоторой степени скоординированным образом, так как одна страница за раз будет нацелена и получит ~ 30 просмотров на ~ 30 разных в диапазоне 119.63.196. * IP в течение 20-минутного периода. Затем он перейдет на другую страницу ... и это будет продолжаться в течение всего дня и накапливать сессии Tomcat.

У меня действительно неактивное время ожидания сеанса установлено довольно высоким (720 минут), и, возможно, мне нужно сильно снизить это число. Может быть, Baidu Japan проводит частые проверки, потому что считает, что страница изменилась из-за изменения ссылки (то есть jsessionid всегда отличается)?

Спасибо за чтение. Я приветствую любые / все предложения!

Эрик

Ответы [ 2 ]

5 голосов
/ 07 октября 2011

Tomcat 7 может предотвратить создание тысяч сеансов, если вы настроите CrawlerSessionManagerValve.Есть краткая документация .

. Кроме того, вы можете захотеть запретить Tomcat вставлять идентификатор сеанса в URL-адрес, поскольку он будет отображаться в поисковых системах.Снова начиная с Tomcat 7, вы можете настроить это:

<session-config>
   <tracking-mode>COOKIE</tracking-mode>
</session-config>
1 голос
/ 28 августа 2011

Пауки действительно обычно не поддерживают сессию с сайтом. Это нормально. Вы должны спросить себя, действительно ли это необходимо, если ваш сайт создает сеанс по обычному запросу GET. Сеансы обычно используются для хранения вошедшего в систему пользователя, его предпочтений, таких как языковой стандарт и т. Д. Но пауки вообще не входят в систему и не отправляют никаких форм. Зачем тогда создавать сеанс?

Существует два основных способа решения этой "проблемы":

  1. Исправьте ваш сайт, чтобы он не создавал ненужных сессий, если в этом нет необходимости. Создайте его только после того, как пользователь войдет в систему или создаст / обновит настройки / переменные для всего сеанса Как именно это сделать, зависит от API / фреймворков, используемых вашим сайтом.

  2. Блокировать (специфических) пауков robots.txt .

Обратите внимание, что создание сеанса и сам сеанс не особенно дороги. Пустой объект сеанса не должен выделять более 1 КБ. Я нахожу ваше время ожидания сессии слишком большим. По умолчанию 30 минут - это уже относительно много. В качестве совершенно другой альтернативы вы также можете установить его на 5 минут или около того и ввести «биение» JS / Ajax, которое отправляет каждые тайм-аут на 1 минуту запрос опроса с файлом cookie сеанса всякий раз, когда пользователь активен в документе (нажмите, нажатие клавиш и т. д.). Это позволит сохранить сеанс на сервере живым. Вы можете найти пример в этом ответе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...