首页 > 解决方案 > Solr 7.5 内存泄漏和使用 sql 注入类型查询崩溃

问题描述

我们有一组在 Solr 7.5 上运行的 solr 节点。我们最近有几集整个集群崩溃并一起死亡。深入挖掘,我们发现罪魁祸首是我们网站上发生的一些 SQL 注入攻击,其中搜索词中包含 SQL 注入,并且被输入到 solr 中的 q 参数中。我能够采用稳定的 solr 并将其隔离,然后只运行 1 个查询并使其崩溃。每次我运行常规查询并看到它工作,然后只需更改 q= 参数,这将超时并最终使 solr 实例崩溃。这是我运行的查询的 q 参数:

q=-6792)))+UNION+ALL+SELECT+NULL,NULL,NULL,NULL,CHR(113)||CHR(98)||CHR(118)||CHR(113)||CHR(113) ||CHR(104)||CHR(68)||CHR(86)||CHR(114)||CHR(109)||CHR(97)||CHR(89)||CHR(89)|| CHR(112)||CHR(76)||CHR(90)||CHR(105)||CHR(113)||CHR(86)||CHR(102)||CHR(97)||CHR( 108)||CHR(89)||CHR(83)||CHR(81)||CHR(107)||CHR(69)||CHR(111)||CHR(97)||CHR(75) ||CHR(87)||CHR(68)||CHR(108)||CHR(73)||CHR(68)||CHR(86)||CHR(118)||CHR(101)|| CHR(71)||CHR(78)||CHR(106)||CHR(106)||CHR(76)||CHR(65)||CHR(82)||CHR(113)||CHR( 106)||CHR(98)||CHR(98)||CHR(113)+FROM+DUAL--+gKiW

我什至去掉了“||” 字符并用“,”替换它们,它仍然崩溃。请注意,这些是 SQL 注入攻击,并不是真正的好查询。Solr GC 日志暴露了问题,并显示内存占用膨胀(在一分钟内从 2GB 到 18GB)到完全垃圾收集失败且 Solr 实例无响应的地步。因此 1 个查询能够将其推到临界点并消耗 18GB 内存。

我曾尝试搜索长描述文本,但效果很好。因此,具有这些字符的某些东西可能导致了这种情况。有谁知道如何/为什么会发生这种情况?

标签: solrmemory-leakssql-injection

解决方案


推荐阅读