0

Google App Engine (GAE) で実行されるプロジェクトに取り組み始めたところです。私はいくつかの ajax で Java (改札) を使用しています。

私はリレーショナル データベースの経験があり、通常は iBatis などを使用しています。JDO を使用して GAE データストアのドキュメントとサンプルを確認すると、次のようなものを実行していることがわかります。

String query = "select from " + Employee.class.getName() + " where lastName == 'Smith'";
List<Employee> employees = (List<Employee>) pm.newQuery(query).execute();

この JDOQL クエリが SQL インジェクションのようなセキュリティ上の問題の影響を受けるかどうかは誰にもわかりませんか? もしそうなら、これを改善する方法はありますか?

4

3 に答える 3

4

はい、これは SQL インジェクション (この場合は JDOQL インジェクション) の影響を受けます。GAE/J ドキュメントの例のように、代わりにパラメーターを使用する必要があります。

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();
}
于 2009-09-01T17:21:26.240 に答える
1

はい、一般的に、インジェクションの脆弱性に対して脆弱です。ただし、ドキュメントの例では適用されません。クラス名はアプリの作成者によって制御され、この場合の姓はリテラル文字列です。

于 2009-09-01T19:49:18.627 に答える
-1

すべての JDOQL クエリは、同等の基になるクエリに変換されます。RDBMS では、たまたま SQL です。GAE/J では、クエリ API です。つまり、何かの「注入」があることは明確ではありません。あなたはアプリケーション開発者であり、クエリを定義するため、そのようなことを完全に制御できます。

于 2009-09-01T18:28:19.257 に答える