2010-11-14 49 views
1

我们的网络应用程序最近已成为一些DDoS的目标。我们使用solr,他们通过每隔几秒搜索一次“**”来设法产生100%的负载。有人能告诉我为什么这个查询需要几十秒钟才能运行,而其他一切只需要几毫秒?此外,代码会将用户ID附加到搜索中,以便查询为“userid:10 AND **”,由于该用户只有10个文档,因此不应真正减慢速度。solr DoS保护

有谁知道发生了什么,以及我们如何才能最好地保护自己?

谢谢。

+0

@Stavros Korokithakis - 你的页面如何转换为solr查询?它只是简单地依赖于GET? – ajreal 2010-11-14 02:05:23

+0

它确实执行了一些转换,但主要是GET字符串,是的。到目前为止,它工作得很好,但我不知道为什么\ * \ *需要这么长时间。 – 2010-11-14 02:21:17

+0

您的默认搜索字段是什么?它是一个大文本字段? – 2010-11-14 04:52:59

回答

1

** Solr被Solr解释为带有开头和结尾通配符的查询,并且由于这些没有定义的字段,所以它会出现在您的默认搜索字段中,正如您在评论中所说的那样,它是一个大文本字段。所以它最终会搜寻一切,这可能是为什么它需要这么长时间。

解决方案:在将查询传递给Solr之前,在您的应用程序中过滤掉**。如果您不希望允许用户发出任何通配符查询,则甚至可以过滤所有*

+0

它确实,但没有理由为什么它应该花费几分钟搜索一个十项目集......我滤除了所有特殊的Lucene字符作为权宜之计(?,*,{,〜),但是dismax解析器更适合面向用户的设置。然而,这有我自己的怪癖,我希望能够克服。 – 2010-11-15 09:53:30

+0

@Stavros:是的,即使使用dismax,仍需要一些消毒。尝试使用debugQuery = on运行有问题的查询,以了解为什么需要这么长时间。 – 2010-11-15 16:58:45