2009-09-01 2 views
0

Google 애플리케이션 엔진 (GAE)에서 실행되는 프로젝트 작업을 시작했습니다. 일부 아약스와 함께 java (개찰구)를 사용하고 있습니다.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

예, 일반적으로 주사 취약점에 취약합니다. 그러나 문서의 예제에서는 적용되지 않습니다. 클래스 이름은 앱 제작자가 제어하며,이 경우 성은 리터럴 문자열입니다.