服务器端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
) ?如何做到这一点,如果不能做到,对上述问题的最佳解决方案是什么?
这可以通过过滤别名来完成。其思想是,不是通过索引名称进行搜索,而是通过该索引的过滤别名进行搜索。这里有一个例子。假设您有一个索引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
变量,将没有匹配的别名,因此没有返回结果,这是您想要的。
相关文章:
- 为什么我的d3.jsselectAll+过滤器没有过滤
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- Angular-表的多列过滤器
- 如何“;过滤器”;或者以其他方式重构该数据
- Angularjs通过过滤器获取indexOf
- ui网格日期单元格过滤器,过滤日期格式导致显示错误的日期
- 使用按钮的Angular UI网格过滤器
- KendoUI网格行过滤器,带有布尔值下拉列表
- 如何在angular.js中动态应用自定义过滤器
- 角度过滤器和ng点击不起作用
- SVG过滤器可以'不能在React中呈现
- 使用javascript或angularjs特定过滤器搜索字符串中第一个img标记的json值
- 在表单中创建一个黑名单过滤器以避免某些单词
- 如何应用带过滤器的ng if来过滤记录,并在同一页面中显示两个不同的视图
- 过滤器返回true或false
- angularjs ng基于点击时的数组值重复过滤器
- DC.js带过滤器的订购
- 使用angularjs内置过滤器过滤代码中的特定属性
- 让我自己的过滤器不工作
- 添加到角度过滤器中的索引