0

我正在使用 javascript-elasticsearch API 来搜索数据。但是,我需要根据他们的工作室限制对某个组的访问。例如:

obj1
title = Titanic
studio = Fox

obj2
title = Lion King
studio = Disney

我可以查询:?q=&studio=disney,但这可以由恶意用户在 javascript 中进行调整q=&studio=。有没有办法&studio=X在我正在使用的 API 密钥或 elasticsearch 本身中设置这个限制()?这将如何完成,如果无法完成,上述问题的最佳解决方案是什么?

4

1 回答 1

1

这可以通过过滤别名来完成。这个想法是,不是通过索引名称搜索,而是通过该索引上的过滤别名进行搜索。这是一个例子。假设您有movies一个类型为的索引movie。最基本的搜索方式是:

curl -XPOST localhost:9200/movies/movie/_search?q=...

以这种方式搜索时,您基本上可以访问整个电影索引。如果您想将对该索引的某些文档的访问限制为某些类型的用户,您可以创建一个别名,该别名将仅查询与某个过滤器匹配的文档,如下所示:

curl -XPOST localhost:9200/_aliases -d '{
    "actions" : [
        {
            "add" : {
                 "index" : "movies",
                 "alias" : "disney_movies",
                 "filter" : { "term" : { "studio" : "disney" } }
            }
        }
    ]
}'

然后,您可以强制搜索该别名而不是索引。这样做将透明地仅搜索电影,studio: disney并且您不再需要在查询本身中明确指定它。

curl -XPOST localhost:9200/disney_movies/movie/_search?q=...

如果有人试图篡改studio变量,将没有匹配的别名,因此不会返回任何结果,这正是您想要的。

于 2015-10-25T03:52:28.457 回答