Jos*_*ema 1 security lucene hibernate-search spring-boot
tldr:我可以安全地将原始查询字符串(作为 URL 参数检索)传递到 Lucene QueryParser 中,而无需任何添加的输入清理吗?
我不是安全专家,但我需要一些建议。正如标题所述,使用此控制器方法是否安全:
@CrossOrigin(origins = "${allowed-origin}")
@GetMapping(value = "/search/{query_string}", produces = MediaType.APPLICATION_JSON_VALUE)
public List doSearch(@PathVariable("query_string") String queryString) {
return searchQueryHandlerService.doSearch(queryString);
}
Run Code Online (Sandbox Code Playgroud)
与此服务方法结合使用(错误处理仅用于测试):
public List doSearch(String queryString) {
LOGGER.debug("Parsing query string: " + queryString);
try {
Query q = new QueryParser(null, standardAnalyzer).parse(queryString);
FullTextEntityManager manager = Search.getFullTextEntityManager(entityManager);
FullTextQuery fullTextQuery = manager.createFullTextQuery(q, Poem.class, Book.class, Section.class);
return fullTextQuery.getResultList();
} catch (ParseException e) {
LOGGER.error(e);
return Collections.emptyList();
}
}
Run Code Online (Sandbox Code Playgroud)
只有基本的输入清理?如果这不安全,我是否可以采取措施使其安全?
任何帮助是极大的赞赏。
我一直在寻找这个和关闭的最后几个星期,我找不到任何理由为什么它不会是安全的,但它是这样一个不起眼的问题(在一个地区我不熟悉),我可能会丢失在该地区工作的任何人都会立即看到一些明显的基本问题。
一个FullTextQuery始终是只读的,所以你不必与人删除表或类似的问题,你可能要考虑与SQL注入时也可以很关心你。
但是,如果您对用户可以看到的数据有安全限制,您可能需要小心。
API 还将操作限制为一组特定的索引 - 在您的情况下包含 Poem 实体的索引 - 因此也不可能突破所选索引。
但你需要考虑:
因此,要具有安全意识,您可能需要:
FullTextFilter以根据您的自定义规则限制用户查询。如果您非常偏执,请考虑任何全文索引实际上都可以揭示某些术语在整个索引中的出现频率。人们通常不会太在意这一点,因为它极难利用,而且只能揭示有关数据分布的极少线索。
所以回到你的例子,如果这个索引只包含诗歌,并且你可以允许任何用户查看你存储的任何诗歌,那么提供关于你正在提供哪些诗歌的线索通常不是安全问题,而是整个您的服务点。
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |