我刚刚开始开发一个将在 Google 应用引擎 (GAE) 上运行的项目。我正在使用 java (wicket) 和一些 ajax。
我在关系数据库方面经验丰富,通常使用 iBatis 等数据库。当使用 JDO 查看 GAE 数据存储的文档和示例时,我发现它们正在执行以下内容:
String query = "select from " + Employee.class.getName() + " where lastName == 'Smith'";
List<Employee> employees = (List<Employee>) pm.newQuery(query).execute();
有谁知道这个 JDOQL 查询是否存在 SQL 注入(inject)等安全问题?如果是这样,有什么办法可以补救吗?
最佳答案
是的,这会受到 sql 注入(inject)的影响(在本例中是 JDOQL 注入(inject))。您应该使用参数,如 GAE/J documentation 中的示例所示。 .
Query query = pm.newQuery(Employee.class);
query.setFilter("lastName == lastNameParam");
query.setOrdering("hireDate desc");
query.declareParameters("String lastNameParam");
try {
List<Employee> results = (List<Employee>) query.execute("Smith");
if (results.iterator().hasNext()) {
for (Employee e : results) {
// ...
}
} else {
// ... no results ...
}
} finally {
query.closeAll();
}
关于java - GAE 数据存储和 JDOQL 的安全风险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1363452/