假设我有一个 JCR 2 查询字符串,它是这样构成的:
String sql2Query = "SELECT * FROM [cq:PageContent] " +
"WHERE [aProperty] <> \" + aValue + "\"";
是否有我可以用来转义 aValue
的辅助方法?
顺便说一下,我已经知道在 SQL2 中我们可以使用占位符进行查询并让框架为我们转义值,但是如果我要动态创建此查询,我如何转义 aValue
以防止 SQL 注入(inject)以及构建损坏的查询?
最佳答案
是的,您可以使用占位符。即使是动态创建的查询也可以使用 占位符。
至于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 中相同)。路径 查询目前不支持占位符。
关于java - 如何在 JCR SQL2 查询中转义动态生成的字符串值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27239837/