2010-11-14 2 views
1

Наше веб-приложение недавно стало объектом некоторых DDoSers. Мы используем solr, и им удалось создать 100% нагрузку, ища «**» каждые несколько секунд. Может ли кто-нибудь сказать мне, почему этот запрос занимает десятки секунд для запуска, тогда как все остальное занимает всего миллисекунды? Кроме того, код добавляет идентификатор пользователя в поиск, поэтому запрос был «userid: 10 AND **», который не должен действительно замедляться, потому что у этого пользователя только 10 документов или около того.solr Защита DoS

Кто-нибудь знает, что происходит, и как мы можем лучше защитить себя от этого?

Спасибо.

+0

@Stavros Korokithakis - как ваша страница переводится в запрос solr? это просто зависит от GET? – ajreal

+0

Он выполняет некоторые преобразования, но в основном это строка GET, да. До сих пор он работал очень хорошо, но я не знаю, почему \ * \ * так долго. –

+0

Каково ваше поле поиска по умолчанию? это большое текстовое поле? –

ответ

1

** получает запрос от Solr как запрос с начальным и конечным шаблоном, и поскольку это не определено поле, оно попадает в поле поиска по умолчанию, которое (как указано в комментариях) является большим текстовым полем. Таким образом, он заканчивает поиск всего, что, вероятно, почему так долго.

Решение: отфильтруйте ** в своем приложении перед передачей запроса Solr. Вы даже можете отфильтровать все *, если вы не хотите разрешать пользователям отправлять какие-либо подстановочные запросы.

+0

Это так, но нет причин, по которым он должен возьмите минутку, чтобы найти набор из десяти предметов ... Я отфильтровал всех специальных персонажей Люцене как секундомер (?, *, {, ~), но парсерный анализатор выглядит лучше для пользовательских установок. Это, однако, имеет свои собственные причуды, которые я надеюсь преодолеть. –

+0

@ Ставрос: Да, какая-то санитария может быть по-прежнему необходима даже с удушью. Попробуйте запустить проблемный запрос с помощью debugQuery = on, чтобы понять, почему это так долго. –

Смежные вопросы