如何解决Elasticsearch 查询清理和安全
我有一个托管在 Elasticsearch 中的数据集,我想将其公开给我的最终用户进行搜索。基本上,我希望在我的应用程序中有一个搜索框,让用户可以编写查询,然后我可以在 Elasticsearch 集群上运行这些查询。
Elasticsearch 建议在我们处理不可信的用户输入时使用 simple query string。这不是最佳选择,因为我想保留默认 Elasticsearch 查询可以处理的基于属性的搜索。
索引文档示例:
{
"account_id": "1357983","first_name": "godzilla","age": 36"
}
# This is not possible with Simple Query String as far as I understand
first_name:"godzilla" AND age:36
我了解安全性和性能是不在集群上直接运行用户输入查询的两个主要原因。
问题:
我已经在做的事情:
- 搜索结果绝不会直接返回给用户。搜索仅用于识别具有关联唯一 ID 的文档。然后使用这些 ID 在 RDBMS 系统中查找实际记录,然后返回给用户。只有那些实际属于用户的记录才会返回给最终用户。
- 每个查询都有一个明确的超时设置为 5 秒。
- 每个查询都将 size 属性配置为 20,以便只返回前 20 条匹配的记录(这对于我的用例来说已经足够了)。
- expand_wildcards 设置为 false
- (我还没有尝试过的幼稚方法) - 在运行查询之前从查询中去除所有通配符表达式(
*
和?
)。如果使用这些术语,则向用户显示错误消息。我目前只对支持完全匹配感兴趣。 - 有没有办法禁用正则表达式、模糊性和通配符,以便仅返回完全匹配的结果,从而在运行
/.*/
等查询时不会影响性能? - 禁用昂贵的查询 as defined here
除了上面提到的几点,从安全和性能的角度,我还能做些什么来保护 ES 集群?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。