让我假装我有一个JCR 2查询字符串,如下所示:
String sql2Query = "SELECT * FROM [cq:PageContent] " +
"WHERE [aProperty] <> \" + aValue + "\"";
是否有帮助方法可以逃脱aValue
?
顺便说一句,我已经知道在SQL2中我们可以使用占位符进行查询,让框架为我们处理值的转义,但如果我要动态创建这个查询,我该如何逃避{{1}阻止SQL注入以及构建破坏的查询?
答案 0 :(得分:7)
是的,您可以使用占位符。即使是动态创建的查询也可以使 占位符。
对于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的 查询目前不支持占位符。
答案 1 :(得分:0)
显然org.apache.jackrabbit.util.Text
有escapeIllegalJcrChars
。这会有帮助吗?
更多信息: https://jackrabbit.apache.org/api/1.4/org/apache/jackrabbit/util/Text.html