我有控制器、服务、存储库类型的 Spring Web 项目,具有企业 couchbase 服务器作为数据库,我使用 spring-data-couchbase 来查询 couchbase 的数据,并且我使用 @Query Annotation 来放置自定义查询。
最近我遇到一个情况,我将 @Param String 名称作为方法参数。在其中一个请求中,我得到名称参数的值已转义双引号,这破坏了我的 couchbase 查询,这是一个复杂的查询,但其简单表示如下
@Query(
"""
#{n1ql.selectEntity} WHERE #{n1ql.filter}
AND name = "#{#name}" AND …
""")
→ 我想使用标准 owasp 库清理“#{#name}”中转义双引号的值,并且我不想执行自定义正则表达式操作。
参考。
如果是“#{#name}”,请使用 $name(不带引号)。 使用 #{#name} 由 Spring SPEL 解析器处理,只是一个字符串替换。 $name(或$1)是一个n1ql查询参数,不可能进行sql注入。