簡體   English   中英

服務器端Elasticsearch過濾器

[英]Server-side elasticsearch filters

我正在使用javascript-elasticsearch API搜索數據。 但是,我需要根據他們的工作室將訪問權限限制為某個組。 例如:

obj1
title = Titanic
studio = Fox

obj2
title = Lion King
studio = Disney

我可以執行查詢: ?q=&studio=disney ,但是惡意用戶可以在javascript中對其進行調整,以執行q=&studio= 是否可以在我正在使用的API密鑰中或在Elasticsearch本身中設置此限制( &studio=X )? 如何解決?如果無法解決,上述問題的最佳解決方案是什么?

這可以通過過濾別名來完成。 這個想法是,與其通過索引名搜索,不如通過該索引的過濾別名搜索。 這是一個例子。 假設您有一個帶有movie類型的索引movies 最基本的搜索方式是:

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變量,將沒有匹配的別名,因此不會返回結果,這就是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM