首页 文章

GAO数据存储和JDOQL的安全风险

提问于
浏览
0

我刚刚开始研究将在谷歌应用引擎(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注入等安全问题的影响?如果是这样,有什么方法可以解决这个问题吗?

3 回答

  • 1

    是的,这需要sql注入(在这种情况下,JDOQL注入) . 您应该使用参数,如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();
    }
    
  • 4

    是的,一般来说它很容易受到注射漏洞的影响 . 但是,在文档的示例中,它不适用 - 类名由应用程序的作者控制,在这种情况下的姓氏是文字字符串 .

  • -1

    任何JDOQL查询都会转换为等效的基础查询 . 在RDBMS中它恰好是SQL . 在GAE / J中,它是他们的查询API . 这意味着没有任何“注入”任何东西是不明确的 . 您是应用程序开发人员并且您定义了查询,因此您可以完全控制这些事情 .

相关问题