0

データの検索に javascript-elasticsearch API を使用しています。ただし、スタジオに基づいて特定のグループへのアクセスを制限する必要があります。例えば:

obj1
title = Titanic
studio = Fox

obj2
title = Lion King
studio = Disney

私は query:?q=&studio=disneyを実行できますが、これは悪意のあるユーザーが javascript で調整してq=&studio=. この制限 ( &studio=X) を使用している API キーまたは Elasticsearch 自体に設定する方法はありますか? これはどのように行われますか?それができない場合、上記の問題に対する最善の解決策は何ですか?

4

1 に答える 1

1

これは、フィルタリングされたエイリアスで実行できます。アイデアは、インデックス名を介して検索する代わりに、そのインデックスでフィルタリングされたエイリアスを介して検索することです。ここに例があります。moviestypeのインデックスがあるとします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 に答える