[英]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.