3

假设我有一个这样的 JCR 2 查询字符串:

String sql2Query = "SELECT * FROM [cq:PageContent] " +
                   "WHERE [aProperty] <> \" + aValue + "\"";

有没有我可以逃脱的辅助方法aValue

顺便说一句,我已经知道在 SQL2 中我们可以使用占位符进行查询,并让框架为我们处理值的转义,但是如果我要动态创建此查询,我该如何转义aValue以防止 SQL 注入以及构建损坏的查询?

4

2 回答 2

8

是的,您可以使用占位符。即使是动态创建的查询也可以使用占位符。

至于 SQL-2,你需要使用单引号,而不是双引号。例子:

SELECT * FROM [cq:PageContent]
WHERE [aProperty] <> 'Joe''s Taxi'

您只需要使用单引号转义字符来转义单引号:

String aValue = "Joe's Taxi";
String sql2Query = "SELECT * FROM [cq:PageContent] " +
    "WHERE [aProperty] <> '" + aValue.replaceAll("'", "''") + "'";

如果要使用 XPath,可以使用单引号或双引号,但通常也使用单引号(与 SQL-2 中相同)。XPath 查询目前不支持占位符。

于 2014-12-02T12:30:25.970 回答
0

显然org.apache.jackrabbit.util.TextescapeIllegalJcrChars。这会有帮助吗?

更多信息: https ://jackrabbit.apache.org/api/1.4/org/apache/jackrabbit/util/Text.html

于 2016-04-19T15:03:35.403 回答