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)
只有基本的输入清理?如果这不安全,我是否可以采取措施使其安全?
任何帮助是极大的赞赏。
我一直在寻找这个和关闭的最后几个星期,我找不到任何理由为什么它不会是安全的,但它是这样一个不起眼的问题(在一个地区我不熟悉),我可能会丢失在该地区工作的任何人都会立即看到一些明显的基本问题。