2009-09-01 13 views
0

Googleアプリケーションエンジン(GAE)で実行されるプロジェクトの作業を開始しました。私はいくつかのajaxでjava(wicket)を使用しています。GAEデータストアとJDOQLのセキュリティリスク

私はリレーショナルデータベースの経験があり、通常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

はい、これは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(); 
} 
-1

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

1

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

関連する問題