java - GAE 数据存储和 JDOQL 的安全风险

标签 java google-app-engine sql-injection jdoql

我刚刚开始开发一个将在 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/

相关文章:

python - Google App Engine Python 单元测试

python - 错误为 "invalid literal for int() with base 10"的查询字符串

java - 这个查询可以进行 SQL 注入(inject)吗?

java - 将参数传递给方法时,强化将查询标记为 sqlInjection

java - 发出带有多部分实体的 Http 请求

java - 在 Linux (Centos/Redhat) 上自动化 Inline::Java 安装

java - 如何配置 JDO 事务来模拟在 App Engine Java 中创建数据库序列?

php - 这段 PHP 代码是否存在安全漏洞?

java - 从 mongodb 检索数据

java - 调度程序 servlet 未找到过滤器中重写的 url