JAVA.SV.LLM.VECTOR.NOFILTER
テナントスコープのフィルタリングが適用されていないベクトル検索
JAVA.SV.LLM.VECTOR.NOFILTER チェッカーは、テナントスコープのフィルタリングが適用されていないベクトルクエリまたは検索クエリを特定します。
脆弱性とリスク
テナントスコープのフィルタリングを行わずにベクトルクエリや検索クエリを実行すると、あるユーザーが別のユーザーのデータにアクセスできてしまう可能性があります。
軽減と防止
ベクトルクエリまたは検索クエリを実行する前に、現在のプリンシパルまたはテナントから導出したフィルターを適用します。
脆弱コード例
コピー
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.VectorStore;
public class Example {
private final VectorStore vectorStore;
public Example(VectorStore vectorStore) {
this.vectorStore = vectorStore;
}
public void search(String query) {
vectorStore.similaritySearch(
SearchRequest.query(query)
.topK(5)); // no tenant-scoped filter
}
}
修正コード例
コピー
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.VectorStore;
public class Example {
private final VectorStore vectorStore;
public Example(VectorStore vectorStore) {
this.vectorStore = vectorStore;
}
public void search(String query, UserPrincipal principal) {
vectorStore.similaritySearch(
SearchRequest.query(query)
.topK(5)
.filterExpression("tenantId == '" + principal.getTenantId() + "'"));
}
}
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。